about_Logging_Non-Windows
簡単な説明
PowerShell は、エンジン、プロバイダー、コマンドレットからの内部操作をログに記録します。
長い説明
PowerShell では、エンジンの開始と停止、プロバイダーの起動と停止など、PowerShell 操作の詳細がログに記録されます。 また、PowerShell コマンドの詳細もログに記録されます。
Windows PowerShell 5.1 でのログ記録の詳細については、「about_Logging」を参照してください。
PowerShell ログの場所は、ターゲット プラットフォームによって異なります。
- Linux では、PowerShell は syslog サーバーに転送できる systemd ジャーナルにログを記録します。 詳細については、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
- 値:
<string name>
、powershell
- 説明: ログ記録時に使用する名前。 既定の ID は です
powershell
。 この値を使用すると、リリースとベータ版など、PowerShell インストールの 2 つのインスタンスの違いを確認できます。 この値は、ログ出力を別のファイルにリダイレクトするためにも使用されます。
- 値:
- LogChannels
- 値:
Operational
、Analytic
- 説明: 有効にするチャネル。 複数の値を指定する場合は、値をコンマで区切ります。 既定値は
Operational
です。
- 値:
- Loglevel
- 値:
Always
、、Critical
、Error
、Warning
、Informational
、、Verbose
Debug
- 説明: 1 つの値を指定します。 値は詳細度の順に一覧表示されます。 選択した値によって、それ自体とその前のすべての値が有効になります。 既定値は
Informational
です。
- 値:
- LogKeywords
- 値:
Runspace
、、Pipeline
、Protocol
、Transport
、、Host
、Cmdlets
、Serializer
、Session
ManagedPlugin
- 説明: キーワードは、PowerShell 内の特定のコンポーネントにログ記録を制限する機能を提供します。 既定では、すべてのキーワードが有効になり、この値を変更することは、特殊なトラブルシューティングにのみ役立ちます。
- 値:
- PowerShellPolicies
- 説明: PowerShellPolicies 設定には、 ModuleLogging、 ProtectedEventLogging、 および ScriptBlockLogging オプションが 含まれています。 詳細については、「 一般的な構成設定」を参照してください。
Linux でジャーナル処理された PowerShell ログ データの表示
PowerShell は、Ubuntu や Red Hat Enterprise Linux (RHEL) などの Linux ディストリビューションのジャーナル デーモンを使用して、システム ジャーナルにログを記録します。
ジャーナル・デーモンは、ログ・メッセージをバイナリ形式で保管します。 ユーティリティを journalctl
使用して、PowerShell エントリのジャーナル ログに対してクエリを実行します。
journalctl --grep powershell
ジャーナル・デーモンは、ログ・メッセージをシステム・ロギング・プロトコル (syslog) サーバーに転送できます。 ForwardToSysLog
Linux システムで syslog ログを/etc/systemd/journald.conf
使用する場合は、ジャーナルされた構成ファイルで オプションを有効にします。 これは、多くの 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 = 運用
- 0x11 = 分析
- EVENTID - ログ エントリのイベント識別子。
- TASK - イベント エントリのタスク識別子
- OPCODE - イベント エントリのオペコード
- LEVEL - イベント エントリのログ レベル
- MESSAGE - イベント エントリに関連付けられているメッセージ
EVENTID、 TASK、 OPCODE、 LEVEL は、Windows イベント ログにログを記録するときに使用される値と同じです。
PowerShell ログ メッセージを別のファイルに書き込む
PowerShell ログ エントリを別のファイルにリダイレクトすることもできます。 PowerShell ログ エントリが別のファイルにリダイレクトされると、既定の syslog ファイルにログが記録されなくなります。
次の手順では、 という名前 powershell.log
のログ ファイルに書き込むよう、Ubuntu の PowerShell ログ エントリを構成します。
などの
nano
テキスト ファイル エディターを使用して、ディレクトリ内の PowerShell ログ構成の/etc/rsyslog.d
構成 (conf
) ファイルをCreateします。 ファイル名の前に、既定値より小さい数値を付けます。 たとえば、40-powershell.conf
既定値は です50-default.conf
。sudo nano /etc/rsyslog.d/40-powershell.conf
ファイルに次の情報を
40-powershell.conf
追加します。:syslogtag, contains, "powershell[" /var/log/powershell.log & stop
新しいファイルの include ステートメントがあることを
/etc/rsyslog.conf
確認します。 次のようなジェネリック ステートメントを含む場合があります。$IncludeConfig /etc/rsyslog.d/*.conf
そうでない場合は、include ステートメントを手動で追加する必要があります。
属性とアクセス許可が適切に設定されていることを確認します。
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
所有権またはアクセス許可が異なる場合は、次の手順を実行します。所有権を root に設定します。
sudo chown root:root /etc/rsyslog.d/40-powershell.conf
アクセス許可の設定: root には読み取り/書き込みがあり、 ユーザー は読み取りを持っています。
sudo chmod 644 /etc/rsyslog.d/40-powershell.conf
rsyslog サービスを再起動します。
sudo systemctl restart rsyslog.service
を実行
pwsh
して、ログに記録する PowerShell 情報を生成します。pwsh
注意
ファイルは
/var/log/powershell.log
、rsyslog サービスが再起動され、PowerShell によってログに記録される情報が生成されるまで作成されません。ファイルにクエリを
powershell.log
実行して、PowerShell 情報が新しいファイルにログに記録されていることを確認します。cat /var/log/powershell.log
macOS での PowerShell ログ データの表示
PowerShell は、Apple の統合ログ システムにログを記録します。これは macOS の機能であり、システムログとアプリケーション ログを 1 つの一元化された場所に収集および保存できます。
Apple の統合ログ システムでは、ログ メッセージがバイナリ形式で格納されます。 コンソール アプリまたはログ ツールを使用して、PowerShell エントリの統合ログ システムに対してクエリを実行します。
macOS 上のコンソール アプリケーションでの PowerShell ログ データの表示
macOS の コンソール アプリケーションは、ログ データを表示するためのグラフィカル ユーザー インターフェイスを提供するユーティリティです。 コンソール アプリケーションは既定で macOS に含まれており、Applications フォルダーの Utilities フォルダーを開いてアクセスできます。
macOS のコンソール アプリケーションで PowerShell ログ データを表示するには、次の手順に従います。
- コンソール アプリケーションのSearchして起動します。
- [デバイス] で [マシン名] を選択 します。
- [Search] フィールドに、PowerShell メインバイナリに「」と入力
pwsh
し、return キーを押します。 - 検索フィルターを から
Any
にProcess
変更します。 - [開始] をクリックします。
- を実行
pwsh
して、ログに記録する PowerShell 情報を生成します。
PowerShell の実行中のインスタンスのプロセス ID は、 変数に $PID
格納されます。 コンソール アプリケーションで PowerShell の特定のプロセス インスタンスをフィルター処理するには、次の手順に従います。
- の
pwsh
インスタンスを実行します。 - 前の手順で開始した PowerShell のインスタンスで を実行
$PID
し、そのプロセス ID を確認します。 - [Search] フィールドに のプロセス ID を
pwsh
入力し、return キーを押します。 - 検索フィルターを から
Any
にPID
変更します。 - [開始] をクリックします。
- 最初の手順で開始した PowerShell のインスタンスからログに記録する PowerShell 情報を生成します。
詳細については、「 Mac のコンソールでログ メッセージを表示する」を参照してください。
macOS でのコマンド ラインからの PowerShell ログ データの表示
macOS のコマンド ラインから PowerShell ログ データを表示するには、ターミナルまたは他のシェル ホスト アプリケーションで コマンドを使用log
します。 これらのコマンドは、 PowerShell、 Z シェル (Zsh)、または Bash から実行できます。
次の例では、 コマンドを log
使用して、リアルタイムで発生しているシステム上のログ データを表示します。 プロセス パラメーターは、プロセスのみのログ データをフィルター処理しますpwsh
。 実行中の pwsh
インスタンスが複数ある場合、プロセス パラメーターは、 その 値としてプロセス ID も受け入れます。 level パラメーターは、指定したレベル以下のメッセージを表示します。
log stream --process pwsh --level info
macOS での PowerShell ログ データのモードとレベル
既定では、PowerShell サブシステムは情報レベルのメッセージをメモリ (モード) に記録し、既定のレベルのメッセージを macOS のディスク (永続化) に記録します。 この動作は、 コマンドを使用して別のモードとログ記録レベルを log config
有効にするように変更できます。
次の例では、PowerShell サブシステムの情報レベルのログと永続化を有効にします。
sudo log config --subsystem com.microsoft.powershell --mode level:info,persist:info
reset パラメーターを使用して、ログ設定を PowerShell サブシステムの既定値に戻します。
sudo log config --subsystem com.microsoft.powershell --reset
コマンドを log show
使用して、ログ項目をエクスポートできます。 コマンドには log show
、最後 N
のアイテム、特定の時刻以降のアイテム、または特定の期間内のアイテムをエクスポートするためのオプションが用意されています。
たとえば、次のコマンドは、 以降の項目を 9am on April 5 of 2022
エクスポートします。
log show --info --start "2022-04-05 09:00:00" --process pwsh
詳細については、 を実行 log show --help
して コマンドのヘルプを log show
表示します。
また、 セキュリティ情報イベント管理 (SIEM) アグリゲーターなど、より安全な場所にログを保存することを検討することもできます。 Microsoft Defender for Cloud Appsを使用して、Azure で SIEM を設定できます。 詳細については、「 汎用 SIEM 統合」を参照してください。
こちらもご覧ください
- Linux syslog と rsyslog.conf の情報については、Linux コンピューターのローカル
man
ページを参照してください - macOS のログ情報 については、 Apple のログ記録に関する開発者向けドキュメントを参照してください
- Windows の場合は、「about_Logging_Windows」を参照してください
- 汎用 SIEM の統合