
PowerShell エラー処理(try~catch)
PowerShellで処理中にエラーが発生することがあります。
このエラーで中断したいときもあれば、無視して進んでほしい時もあります。
その時のメモです。
通常は処理を継続する
エラーが起こった時、
変数 $ErrorActionPreference の値によって動作が変わります
$ErrorActionPreference の値はデフォルトでは"continue"になっています。
write-errorで意図的にエラーを起こしてみます。
$ErrorActionPreference = "Continue"
try {
write-Error "test"
write-host "処理を継続"
} catch {
write-host "例外をキャッチ"
}
write-host "処理完了"

上のスクリプトを実行するとwrite-errorでエラーが起こり
赤字でエラー表示されますが"処理を継続"と"処理完了"が表示されて中断しないで最後まで実行されていることが分かります。
PowerShellは自動化でよく使われると思うので正しい動作だと思います。
例外処理をキャッチしたい
エラーが起こったら処理を中断してエラーに対処したいときは、
$ErrorActionPreferenceの値を"Stop"にします。
例がこちら↓
$ErrorActionPreference = "Stop"
try {
write-Error "test"
write-host "処理を継続"
} catch {
write-host "例外をキャッチ"
}
write-host "処理完了"

このスクリプトだと"処理を継続"は表示されず"例外をキャッチ"が表示されているので例外処理を行っていることが分かります。
ただし
この方法ですと$ErrorActionPreferenceの値が"Stop"になっているので全ての処理で例外処理を気にしなくてはいけません。
一時的に例外処理をキャッチしたい
$ErrorActionPreferenceの値が"Continue"のままで
一時的に例外処理をキャッチしたいときは
コマンドレットに-ErrorAction Stopを付けて実行します。
$ErrorActionPreference = "Continue"
try {
write-Error "test" -ErrorAction Stop
write-host "処理を継続"
} catch {
write-host "例外をキャッチ"
}
write-host "処理完了"

write-errorの後ろに-ErrorAction Stopを付けると
一時的に例外がキャッチできます。
$ErrorActionPreferenceの値を"Stop"にしているのと同じです。
逆に一時的ににエラーを無視したいときは-ErrorAction Continueを付けると例外処理が起こらなくなります。

まとめ
・通常はエラーが起こっても無視して進む
・例外処理がしたいときは$ErrorActionPreferenceの値を"Stop"
またはコマンドレットの後ろに-ErrorAction Stopを付ける
#PowerShell #プログラミング学習 #プログラミング入門 #コマンドレット #例外処理 #try~catch #$ErrorActionPreference #毎日投稿