私は、コマンドレットWrite-Error
を呼び出す単純なLog関数をコーディングしました。ただし、予期しない動作が発生します。PowerShell書き込みエラー
function foo {
Param([string]$Msg = "This is an error")
Write-Error $Msg
}
は、以下でfoo
結果を呼び出す:あなたの例与えるためにそう
foo: This is an error At line:1 char:1 + foo
を、foo
(およびコマンドレットそこWrite-Error
)を呼び出すと、にPSリンクエラーをスローしているようです機能foo
それ自身。
メッセージをPSエラーストリームに書き込む正しい方法は、呼び出し元関数のエラーのように見えません。
私は答えを見つけました。違いは少し微妙です。エラーを投げてエラーメッセージを標準エラーストリームに出力するのには違いがあります。 try/catch構造では、エラーをスローするとcatchブロックにジャンプします。 tryブロックでwrite-error
を使用している間は、出力を標準エラーストリームにパイプするだけです。次の関数はcatchブロックには入りません。しかし、エラーメッセージ "Hey"を$ error変数に書き込んで、他のすべての属性を空にします。
function myErr { try { write-error "Hey" } catch { write-host "Ups" } }
エラーメッセージが、しかし、エラーが1行目、1
だから大丈夫、私はwrite-error
を呼び出すときに、これは標準的な動作であると考えられることがわかり文字でmyErr
で発生したことが表示されます。私はwrite-output
を使用します。そのため
function foo {
Param([string]$Msg = "This is an error")
Write-Error $Msg
}
使用し、ライト出力:この代わりの
Ehhh、 –
エラー処理のためにtry/catch構造を試してください –
これは 'Write-Error'の働きです。あなたがそれを望まないなら 'Write-Output'を使います。 –