Last updated on :August 28th, 2023 at 05:23 pm
PowerShellでtry-catch-finally構文を二重ネストして使うことがあったのですが、内側のcatchでexitした後の挙動についてまとまった記事がなかったのでメモ。
知りたいこと
以下のようにtry-catch-finally構文で二重ネストした時、内側のcatchで例外を捉えてexit 1した時に内外のfinallyはそれぞれ実行されるのか?
try{
    ①(外側のtryブロック)
    try{
        ②(内側のtryブロック)
    }
    catch{
        ③(内側のcatchブロック)
        ※ブロックの最後にexit 1
    }
    finally{
        ④(内側のfinallyブロック)
    }
}
catch{
    ⑤(外側のcatchブロック)
}
finally{
    ⑥(外側のfinallyブロック)
}
結論
③(内側のcatchブロック)で例外を捉えてexit 1 する場合の処理の流れは以下の通り
- ①(外側のtryブロック)
 - ②(内側のtryブロック) ※例外発生
 - ③(内側のcatchブロック) exit 1
 - ④(内側のfinallyブロック)
 - ⑥(外側のfinallyブロック)
 
catchブロックは例外を捉えた時だけ実行されますが、finallyブロックは例外が発生してもしなくても実行されます。
