サーチ…


前書き

このトピックでは、PowerShellのエラータイプとエラー処理について説明します。

エラーの種類

エラーはエラーです。その中にどのような型があるのだろうかと疑問に思うかもしれません。まあ、powershellでは、このエラーは大きく2つの基準に分類されます。

  • 終了エラー
  • 終了しないエラー

名前が示すように、終了エラーは実行を終了させ、非終了エラーは実行を次のステートメントに継続させます。

$ ErrorActionPreferenceの値がデフォルト(Continue)であると仮定すると、これは真です。 $ ErrorActionPreferenceは、 "非終了"エラーの場合の対処方法をpowershellに指示するPrefrence変数です。

終了エラー

終了エラーは、以下のように典型的なtry catchで処理できます

Try
{
    Write-Host "Attempting Divide By Zero"
    1/0
}
Catch
{
    Write-Host "A Terminating Error: Divide by Zero Caught!" 
}

上記のスニペットが実行され、catchブロックを介してエラーが捕捉されます。

非終了エラー

一方、非終了エラーは、デフォルトでcatchブロックに捕捉されません。その理由は、Non-Terminatingエラーは重大なエラーとはみなされないからです。

Try
{
    Stop-Process -Id 123456
}
Catch
{
    Write-Host "Non-Terminating Error: Invalid Process ID"
}

上記の行を実行すると、catchブロックからの出力は得られません。なぜなら、エラーは重大ではないとみなされ、実行は単に次のコマンドから継続するからです。ただし、コンソールにエラーが表示されます。終了しないエラーを処理するには、エラーの優先順位を簡単に変更する必要があります。

Try
{
    Stop-Process -Id 123456 -ErrorAction Stop
}
Catch
{
    "Non-Terminating Error: Invalid Process ID"
}

さて、更新されたエラー設定では、このエラーは終了エラーとみなされ、catchブロックで捕捉されます。

終了中および終了していないエラーの呼び出し:

Write-Errorコマンドレットは、単に呼び出すホストプログラムにエラーを書き込みます。それは実行を停止しません。どこからスローすると終了エラーが発生し、実行を停止します

Write-host "Going to try a non terminating Error "
Write-Error "Non terminating" 
Write-host "Going to try a terminating Error "
throw "Terminating Error " 
Write-host "This Line wont be displayed" 


Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow