2017年4月22日

【PowerShell】エラー処理(try...catch...finallyステートメント)


PowerShell2.0以降では、try...catch...finallyステートメントが使えます。

例1

基本的なtry...catch...finally処理
try{
    $a = 5 / 0
}catch{
    Write-Host "エラーが発生しました。"
}finally{
    Write-Host "答えは" $a
}

実行結果
エラーが発生しました。
答えは 
エラーが発生すると、catchブロックの処理が行われ、最後にfinallyブロックの処理が実行されます。
finallyブロックは、エラーの発生にかかわらず実行されます。
また、finallyブロックは省略できます。


例2

エラー内容を表示させる
try{
    $a = 5 / 0
}catch{
    Write-Host "エラーが発生しました。"
    Write-Host $_
}finally{
    Write-Host "答えは" $a
}

実行結果
エラーが発生しました。
0 で除算しようとしました。
答えは 
エラーが発生すると、エラーオブジェクトが自動変数$_に格納されます。
上の例では、catchブロックで$_を表示させています。


例3

特定の例外をキャッチする
try{
    $a = 5 / 0
}catch [System.DivideByZeroException]{
    Write-Host "値を 0 で除算しました。"
    Write-Host $_
}catch{
    Write-Host "エラーが発生しました。"
    Write-Host $_
}finally{
    Write-Host "答えは" $a
}

実行結果
値を 0 で除算しました。
0 で除算しようとしました。
答えは 
catchブロックで特定の例外を捕捉することが出来ます。
この例では、[System.DivideByZeroException]で0除算でスローされる例外をキャッチしています。


<参考サイト>
about_Try_Catch_Finally | Microsoft Technet



スポンサーリンク