例外処理をする
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では、エラーに対するさまざまな対処方法および内容の取得方法が準備されています。このことを理解し、スクリプト開発に役立てていただければと思います。
