ja-JP/about_Logging_Non-Windows.help.txt
|
TOPIC about_Logging_Non-Windows 簡単な説明 PowerShell は、エンジン、プロバイダー、コマンドレットの内部操作を記録し ます。 詳細な説明 PowerShell は、エンジンの開始と停止、プロバイダーの開始と停止など、 PowerShell の操作に関する詳細を記録します。また、PowerShell コマンドに関 する詳細も記録します。 Windows PowerShell 5.1 でのログ記録については、about_Logging を参照してく ださい。 PowerShell ログの場所は、対象のプラットフォームによって異なります。 - Linux では、PowerShell は systemd ジャーナルに記録します。これは syslog サーバーに転送できます。詳しくは、お使いの Linux ディストリビューション の man ページを参照してください。 - macOS では、Apple の統合ログシステムが使われます。詳しくは、Apple のロ グ記録に関する開発者向けドキュメントを参照してください。 PowerShell は、2 つのカテゴリのログ記録の構成をサポートしています。 - モジュールログ記録 - 指定したモジュールのメンバーについて、パイプライン の実行イベントを記録します。モジュールログ記録は、セッションと特定のモ ジュールの両方で有効にする必要があります。このログ記録の構成について詳 しくは、about_PowerShell_Config を参照してください。 構成によってモジュールログ記録が有効になっている場合は、モジュールの LogPipelineExecutionDetails プロパティの値を設定することで、セッション 内の特定のモジュールについてログ記録を有効または無効にできます。 たとえば、PSReadLine モジュールのモジュールログ記録を有効にするには次の ようにします。 $psrl = Get-Module PSReadLine $psrl.LogPipelineExecutionDetails = $true Get-Module PSReadLine | Select-Object Name, LogPipelineExecutionDetails Name LogPipelineExecutionDetails ---- --------------------------- PSReadLine True - スクリプトブロックログ記録 - 対話的に呼び出されたか、自動化を通じて呼び 出されたかにかかわらず、コマンド、スクリプトブロック、関数、スクリプト の処理を記録します。 スクリプトブロックログ記録を有効にすると、PowerShell は処理するすべての スクリプトブロックの内容を記録します。有効にすると、新しい PowerShell セ ッションがこの情報を記録します。 メモ: 診断目的以外でスクリプトブロックログ記録を使う場合は、保護された イベントログ記録を有効にすることをお勧めします。詳しくは、 about_PowerShell_Config を参照してください。 Linux または macOS でログ記録を構成する Linux と macOS でのログ記録の構成は、powershell.config.json ファイルに格 納されます。powershell.config.json ファイルは、PowerShell の $PSHOME ディ レクトリにある JSON 形式のファイルです。この構成ファイルが存在しない場合 は、既定の設定を変更するために作成する必要があります。PowerShell の各イン ストールでは、このファイルの独自のコピーが使われます。 既定では、PowerShell は Operational チャネルへの Informational ログ記録を 有効にします。詳細なログ出力が必要な場合や、分析ログ出力を有効にする場合 などは、構成を変更できます。 次のコードは構成の例です。 { "ModuleLogging": { "EnableModuleLogging": false, "ModuleNames": [ "PSReadLine", "PowerShellGet" ] }, "ScriptBlockLogging": { "EnableScriptBlockInvocationLogging": true, "EnableScriptBlockLogging": true }, "LogLevel": "verbose" } 次に、PowerShell のログ記録を構成するためのプロパティの一覧を示します。プ ロパティが構成に記載されていない場合、PowerShell は既定値を使います。 - LogIdentity - 値: <文字列名>、powershell - 説明: ログ記録時に使う名前です。既定の ID は powershell です。この値 は、リリース版とベータ版など、PowerShell インストールの 2 つのインスタ ンスを区別するために使えます。この値は、ログ出力を別のファイルにリダ イレクトするためにも使われます。 - LogChannels - 値: Operational、Analytic - 説明: 有効にするチャネルです。複数指定する場合は、値をコンマで区切り ます。既定値は Operational です。 - LogLevel - 値: Always、Critical、Error、Warning、Informational、Verbose、Debug - 説明: 単一の値を指定します。値は詳細度の昇順で並んでいます。選択した 値は、その値とそれより前のすべての値を有効にします。既定値は Informational です。 - LogKeywords - 値: Runspace、Pipeline、Protocol、Transport、Host、Cmdlets、 Serializer、Session、ManagedPlugin - 説明: キーワードを使うと、ログ記録を PowerShell 内の特定のコンポーネ ントに限定できます。既定ではすべてのキーワードが有効になっており、こ の値の変更は専門的なトラブルシューティングのときにのみ役立ちます。 - PowerShellPolicies - 説明: PowerShellPolicies 設定には、ModuleLogging、 ProtectedEventLogging、ScriptBlockLogging の各オプションが含まれます。 詳しくは、共通の構成設定を参照してください。 Linux で journald の PowerShell ログデータを表示する PowerShell は、Ubuntu や Red Hat Enterprise Linux (RHEL) などの Linux ディ ストリビューションでは、journald デーモンを使って systemd ジャーナルに記 録します。 journald デーモンは、ログメッセージをバイナリ形式で格納します。 journalctl ユーティリティを使って、PowerShell エントリのジャーナルログを 照会します。 journalctl --grep powershell journald デーモンは、ログメッセージを System Logging Protocol (syslog) サ ーバーに転送できます。Linux システムで syslog ログ記録を使う場合は、 /etc/systemd/journald.conf の journald 構成ファイルで ForwardToSysLog オ プションを有効にします。これは多くの Linux ディストリビューションの既定の 構成です。 Linux で syslog の PowerShell ログデータを表示する Linux システムで syslog ログ記録を使う場合は、お使いの Linux ディストリビ ューションのパッケージマネージャーを使って、rsyslog などの syslog サーバ ーをインストールします。Ubuntu など一部の Linux ディストリビューションで は、rsyslog が事前インストールされています。 syslog プロトコルは、ログメッセージを標準化されたテキスト形式で格納しま す。任意のテキスト処理ユーティリティを使って、syslog の内容を照会または表 示できます。 既定では、syslog はログエントリを次の場所に書き込みます。 - Ubuntu を含む Debian ベースのディストリビューション: /var/log/syslog - RHEL ベースのディストリビューション: /var/log/messages 次の例では、cat コマンドを使って Ubuntu の PowerShell の syslog エントリを 照会します。 cat /var/log/syslog | grep -i powershell syslog メッセージの形式 syslog メッセージの形式は次のとおりです。 TIMESTAMP MACHINENAME powershell[PID]: (COMMITID:TID:CID) [EVENTID:TASK.OPCODE.LEVEL] MESSAGE - TIMESTAMP - ログエントリが生成された日時です。 - MACHINENAME - ログが生成されたシステムの名前です。 - PID - ログエントリを書き込んだプロセスのプロセス ID です。 - COMMITID - ビルドの生成に使われた git コミット ID またはタグです。 - TID - ログエントリを書き込んだスレッドのスレッド ID です。 - CID - ログエントリの 16 進チャネル識別子です。 - 0x10 = Operational - 0x11 = Analytic - EVENTID - ログエントリのイベント識別子です。 - TASK - イベントエントリのタスク識別子です。 - OPCODE - イベントエントリの opcode です。 - LEVEL - イベントエントリのログレベルです。 - MESSAGE - イベントエントリに関連付けられたメッセージです。 EVENTID、TASK、OPCODE、LEVEL は、Windows イベントログに記録するときと同じ 値です。 PowerShell のログメッセージを別のファイルに書き込む PowerShell のログエントリを別のファイルにリダイレクトすることもできます。 PowerShell のログエントリが別のファイルにリダイレクトされると、既定の syslog ファイルには記録されなくなります。 次の手順では、Ubuntu で PowerShell のログエントリを powershell.log という 名前のログファイルに書き込むように構成します。 1. nano などのテキストエディターを使って、/etc/rsyslog.d ディレクトリに PowerShell ログ構成用の構成 (conf) ファイルを作成します。ファイル名の 先頭には、既定値より小さい数字を付けます。たとえば、既定が 50-default.conf の場合は 40-powershell.conf とします。 sudo nano /etc/rsyslog.d/40-powershell.conf 2. 40-powershell.conf ファイルに次の情報を追加します。 :syslogtag, contains, "powershell[" /var/log/powershell.log & stop 3. /etc/rsyslog.conf に新しいファイルの include ステートメントがあること を確認します。次のような汎用ステートメントで include されている場合が あります。 $IncludeConfig /etc/rsyslog.d/*.conf 含まれていない場合は、include ステートメントを手動で追加する必要があり ます。 4. 属性とアクセス許可が適切に設定されていることを確認します。 ls -l /etc/rsyslog.d/40-powershell.conf -rw-r--r-- 1 root root 67 Nov 28 12:51 40-powershell.conf 40-powershell.conf ファイルの所有権やアクセス許可が異なる場合は、次の 手順を実行します。 1. 所有権を root に設定します。 sudo chown root:root /etc/rsyslog.d/40-powershell.conf 2. アクセス許可を設定します。root には読み取り/書き込み、users には読み 取りを与えます。 sudo chmod 644 /etc/rsyslog.d/40-powershell.conf 5. rsyslog サービスを再起動します。 sudo systemctl restart rsyslog.service 6. pwsh を実行して、ログに記録する PowerShell 情報を生成します。 pwsh メモ: /var/log/powershell.log ファイルは、rsyslog サービスが再起動さ れ、PowerShell がログに記録する情報を生成するまで作成されません。 7. powershell.log ファイルを照会して、PowerShell 情報が新しいファイルに記 録されていることを確認します。 cat /var/log/powershell.log macOS で PowerShell ログデータを表示する PowerShell は、Apple の統合ログシステムに記録します。これは、システムログ とアプリケーションログを一元化された 1 つの場所に収集して格納できる macOS の機能です。 Apple の統合ログシステムは、ログメッセージをバイナリ形式で格納します。 PowerShell ログイベントを統合ログシステムから照会するには、log ツールを使 う必要があります。PowerShell ログイベントは、macOS の Console アプリケーシ ョンには表示されません。Console アプリは、統合ログシステムより前の古い syslog ベースのログ記録向けに設計されています。 macOS でコマンドラインから PowerShell ログデータを表示する macOS でコマンドラインから PowerShell ログデータを表示するには、ターミナル やその他のシェルホストアプリケーションで log コマンドを使います。これらの コマンドは、PowerShell、Z Shell、Bash から実行できます。 次の例では、log コマンドを使って、リアルタイムで発生しているシステム上のロ グデータを表示します。process パラメーターは、ログデータを pwsh プロセスの みにフィルター処理します。複数の pwsh インスタンスが実行されている場合、 process パラメーターはプロセス ID を値として受け取ることもできます。level パラメーターは、指定したレベル以下のメッセージを表示します。 log stream --predicate "subsystem == 'com.microsoft.powershell'" --level info log show コマンドを使うと、ログ項目をエクスポートできます。log show コマン ドには、最後の N 項目、指定した時刻以降の項目、指定した時間範囲内の項目を エクスポートするためのオプションがあります。 たとえば、次のコマンドは 2022 年 4 月 5 日午前 9 時以降の項目をエクスポー トします。 log show --start "2022-04-05 09:00:00" --predicate "subsystem == 'com.microsoft.powershell'" 詳しくは、log show --help を実行して log show コマンドのヘルプを表示してく ださい。 ログデータを JSON 形式で出力することもできます。これにより、イベントデータ を PowerShell オブジェクトに変換できます。次の例では、イベントを JSON 形式 で出力します。ConvertFrom-Json コマンドレットを使って JSON データを PowerShell オブジェクトに変換し、$logRecord 変数に格納します。 log show --predicate "subsystem == 'com.microsoft.powershell'" --style json | ConvertFrom-Json | Set-Variable logRecord Security Information and Event Management (SIEM) アグリゲーターなど、よりセ キュリティが高い場所にログを保存することも検討してください。 macOS での PowerShell ログデータのモードとレベル 既定では、PowerShell サブシステムは macOS で info レベルのメッセージをメモ リ (モード) に、default レベルのメッセージをディスク (永続化) に記録しま す。この動作は、log config コマンドを使って別のモードとレベルのログ記録を 有効にすることで変更できます。 次の例では、PowerShell サブシステムの info レベルのログ記録と永続化を有効 にします。 sudo log config --subsystem com.microsoft.powershell --mode level:info,persist:info reset パラメーターを使うと、PowerShell サブシステムのログ設定を既定値に戻 せます。 sudo log config --subsystem com.microsoft.powershell --reset 関連項目 Linux の syslog および rsyslog.conf については、Linux コンピューターの ローカル man ページを参照してください macOS のログ記録については、Apple のログ記録に関する開発者向けドキュメント を参照してください Windows については、about_Logging_Windows を参照してください ---- 原文: PowerShell-Docs (CC BY 4.0) の翻訳 / PSHelpJaJP |