2017-01-25 21 views
0

私は、コマンドレット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 
} 

使用し、ライト出力:この代わりの

+0

Ehhh、 –

+0

エラー処理のためにtry/catch構造を試してください –

+0

これは 'Write-Error'の働きです。あなたがそれを望まないなら 'Write-Output'を使います。 –

答えて

0

。これは、PSでの書き込みエラーの通常の動作です:エラーは、関数によってエラーが発生した、なぜあなたはエラー出力状態を持っていないでしょうか:PSでの書き込みエラーの通常の動作です:

function foo { 
    Param([string]$Msg = "This is an error") 
    Write-Output $Msg 
} 
関連する問題