例外処理をする
PowerShellではtrap
文を用いることで、例外処理を行うことができます。trap
文の構文は下記の通りです。
trap [<例外の種類>] { trap文本体 }
「例外の種類」は省略することが可能です。
例えば下記では、1/$Null
を実行されるゼロ除算例外が発生するため、trap
へ制御が移り「例外発生」の文字列を表示します。
PS C:\Work> trap >> {"例外発生" } >> 1/$Null >> 例外発生 0 で除算しようとしました。 発生場所 行:3 文字:3 + 1/$ <<<< Null
breakで処理を中断する
次に、例外が発生したら処理を中断する方法について見てみましょう。中断するにはbreak
を使用します。
trap { "例外が発生しました" break } 1/$Null Write-Host "スクリプト終了"
このスクリプトは、例外が発生するとtrap
を実行するので「例外が発生しました」のメッセージを表示します。さらにbreak
が実行されエラーメッセージを表示し、処理を中断します。
この結果、「スクリプト終了」の文字列は表示されません。
PS C:\Work> ./trap2.ps1 例外が発生しました 0 で除算しようとしました。 発生場所 C:\Work\trap.ps1:7 文字:3 + 1/$ <<<< Null
continueを使用する
次にtrap
の中でcontinue
を使用するとどうなるか、見てみましょう。
trap { "例外が発生しました" continue } 1/$Null Write-Host "スクリプト終了"
実行結果は下記のとおりで、例外が発生すると「例外が発生しました」のメッセージが表示され、最後の「スクリプト終了」が表示されます。
PS C:\Work> ./trap3.ps1 例外が発生しました スクリプト終了
このようにcontinue
を使用した場合はエラーメッセージは表示されず、trap
を実行後、例外が発生した次の行から処理が再開されます。
まとめ
今回は
- エラーのリダイレクト
-ErrorRecord
オブジェクト- $Error変数
- $?変数
-ErrorAction
パラメータと$ErrorActionPreference
変数--ErrorVariable
パラメータ- 例外処理
について取り上げました。
PowerShellでは、エラーに対するさまざまな対処方法および内容の取得方法が準備されています。このことを理解し、スクリプト開発に役立てていただければと思います。