エラー メッセージが表示された場合は、エラー ストリームをキャプチャする必要があります。
$msg = command 2>&1
また
command 2>error.txt
PowerShell は、それぞれの出力をキャプチャするためにファイルにリダイレクトできるさまざまなストリームにメッセージを書き込みます。
- ストリーム 1 (デフォルト): 通常の出力 ("STDOUT")
- ストリーム 2: 外部プログラムからのエラー メッセージを含むエラー メッセージ ("STDERR")
- ストリーム 3: 警告メッセージ
- ストリーム 4: 詳細メッセージ
- ストリーム 5: デバッグ メッセージ
- ストリーム 6: 情報メッセージ(PowerShell v5 以降のみ)
ファイル内の特定のストリームをキャプチャするには、ストリーム番号をファイル名にリダイレクトする必要があります。例えば
command 2>"C:\path\to\error.log"
command
は、 によって生成されたすべてのエラー メッセージをファイルに取り込みますC:\path\to\error.log
。2>>
実行ごとにファイルを上書きするのではなく、ファイルに追加する場合は、代わりに使用2>
します。
他のストリームを STDOUT と組み合わせて、すべてのコマンド出力を処理/リダイレクトすることもできます。
command >>"C:\path\to\all.log" *>&1
ストリームとリダイレクトの詳細については、またはこの Scripting Guy の記事を参照Get-Help about_Redirection
してください。
注目に値するもの:
- リダイレクトは PowerShell v3 で導入された
*>
ため、PowerShell v2 以前では機能しません。
- PowerShell v5 では、新しいストリーム ( Information
Write-Host
、ストリーム番号 6) が導入されました。これは、コマンドレットの目的を理解していないために悪用され続けたためです。