web-dev-qa-db-ja.com

PowerShellで標準エラーに書き込むにはどうすればよいですか?

標準エラーストリームにエコーする方法と実行可能ファイルのエラーストリームをリダイレクトする方法の両方を理解するのに問題があります。

Bourne Shell および Korn Shell のバックグラウンドから来ました。

# Write to stderr
echo "Error Message!" >&2

# Redirect stderr to file
/do/error 2>/tmp/err.msg
39
Brett Ryan

Write-Errorを使用して、stderrに書き込みます。 stderrをファイルにリダイレクトするには、次を使用します。

 Write-Error "oops" 2> /temp/err.msg

または

 exe_that_writes_to_stderr.exe bogus_arg 2> /temp/err.msg

PowerShellはエラーをエラーレコードとして書き込むことに注意してください。エラーレコードの詳細な出力を回避する場合は、次のようにエラー情報を自分で書き出すことができます。

PS> Write-Error "oops" -ev ev 2>$null
PS> $ev[0].exception
oops

-EVは、-ErrorVariableの短縮形(エイリアス)です。エラーはすべて、このパラメーターの引数で指定された変数に格納されます。エラーを$nullにリダイレクトしない限り、PowerShellは引き続きコンソールにエラーを報告します。

42
Keith Hill

おそらくこれが必要です:

$Host.ui.WriteErrorLine('I work in any PowerShell Host')

以下も表示される場合がありますが、PowerShellホストはコンソールウィンドウ/デバイスであると想定されるため、あまり有用ではないと考えています。

[Console]::Error.WriteLine('I will not work in the PowerShell ISE GUI')
31
Chris Sears