次のスニペットを検討してください。
function fail {
throw "simulated failure"
}
fail
スクリプトを実行すると、デフォルトの例外処理により、例外がスローされた行とコマンドが出力されます。
simulated failure
At D:\tmp\Untitled1.ps1:2 char:10
+ throw <<<< "simulated failure"
+ CategoryInfo : OperationStopped: (simulated failure:String) [], RuntimeException
+ FullyQualifiedErrorId : simulated failure
一方、例外をキャッチして自分で印刷すると、次のようになります。
function fail {
throw "simulated failure"
}
try {
fail
} catch {
Write-Error $_
exit 1
}
Write-Error の出力は、エラーがスクリプト内で発生したことのみを示しています。
D:\tmp\Untitled2.ps1 : simulated failure
At line:1 char:16
+ .\Untitled2.ps1 <<<<
+ CategoryInfo : NotSpecified: (:) [Write-Error], WriteErrorException
+ FullyQualifiedErrorId : Microsoft.PowerShell.Commands.WriteErrorException,Untitled2.ps1
最初のケースと同じ出力を得るにはどうすればよいですか?
注: 例外をキャッチする理由は、「exit 1」を実行するためです。デフォルトでは、powershell は例外の後でも 0 で終了するため、スクリプトは成功したように見えます。