Monday, July 07, 2008

PowerShellではTrap文を用いることで、例外処理を行うことができます。

trap文の構文は下記の通りです。

trap [<例外の種類>]
{
    trap文本体
}

「例外の種類」は省略することが可能です。

たとえば下記は、1/$Null を実行すると、ゼロ除算例外が発生するため、trapへ制御が移り "例外発生" の文字列を表示します。

PS C:\Work> trap
>> {"例外発生" }
>> 1/$Null
>>
例外発生
0 で除算しようとしました。
発生場所 行:3 文字:3
+ 1/$ <<<< Null

 

実際にスクリプトで使用する例を見ていきたいと思います。

まずはtrapなしの下記をメモ帳などで入力し、trap1.ps1 として保存してください。

1/$Null

Write-Host "スクリプト終了"

このスクリプトを実行すると下記のようにエラーメッセージが表示された後、「スクリプト終了」という文字が表示されます。

PS C:\Work> ./trap1.ps1
0 で除算しようとしました。
発生場所 C:\Work\trap1.ps1:1 文字:3
+ 1/$ <<<< Null
スクリプト終了

breakで処理を中断する

次に、例外を捕らえて処理を中断してみましょう。中断するにはbreakを使用します。(trap2.ps1)

trap 
{
    "例外が発生しました"
    break
}

1/$Null

Write-Host "スクリプト終了"

このスクリプトを実行すると下記のように、例外が発生するとTrapを実行するので「例外が発生しました」のメッセージとエラーメッセージを表示し、処理を中断します。

この結果、「スクリプト終了」の文字列は表示されません。

PS C:\Work> ./trap2.ps1
例外が発生しました
0 で除算しようとしました。
発生場所 C:\Work\trap.ps1:7 文字:3
+ 1/$ <<<< Null

continueを使用する

次にtrapの中でcontinueを使用するとどうなるかみてみましょう。(trap3.ps1)

trap 
{
    "例外が発生しました"
    continue
}

1/$Null

Write-Host "スクリプト終了"

実行結果は下記の通りで、例外が発生すると「例外が発生しました」のメッセージが表示され、最後の「スクリプト終了」が表示されます。

PS C:\Work> ./trap3.ps1
例外が発生しました
スクリプト終了

このようにcontinueを使用した場合はエラーメッセージは表示されず、trapを実行後、例外が発生した次の行から処理が再開されます。

Monday, July 07, 2008 11:12:51 PM (Tokyo Standard Time, UTC+09:00)  #    Comments [0]  |  Trackback
Comments are closed.

Theme design by Jelle Druyts

Pick a theme: