私はライブラリ関数でスクリプトブロックを扱おうとしています。私は、提供されたスクリプトブロックで実行時エラーを確実に検出し、これらを報告できることを確認したい。次の例では、実行時エラーが発生するスクリプトブロックを作成します。スクリプトブロックで例外をキャッチするにはどうすればよいですか?
私の期待は、キャッチブロックがキャプチャしてエラーメッセージを出力することです。これは起こりません。赤いテキストでコンソールにエラーをダンプしますが、コントロールはcatchブロックにまったく渡されません。
$cmd = [ScriptBlock]::Create("Get-Content doesnotexist.txt")
$results = ''
try {
$results = & $cmd
}
catch {
$results += "Error: $($_.Exception.Message)"
}
"Results: $results"
Results:
PS:>
この例で間違いを見つけてもらえますか?
try catchは__terminating errors__を処理します.__ '$ cmd = [ScriptBlock] :: Create(" Get-Content doesnotexist.txt -ErrorAction Stop ")' – Matt
これを見てくださいhttp://stackoverflow.com/questions/9948517/how-to-stop-a-powershell-script最初のエラーとこれはhttp://stackoverflow.com/questions/13820140/how-can-i-rethrow-an-exception-from-catch-block-in-powershell –
@MartinMaatあなたが参照した投稿必要な情報が含まれていました。 continueのデフォルトのエラーアクションは、私のtry catchがバイパスされた理由です。私がそれをストップに変えれば、それは私が期待している通りに働く。 –