ウェブサイト検索

PowerShellにおけるエラーハンドリングの習得:Try、Catch、およびFinally


エラーハンドリングは、どのプログラミング言語でも堅牢なスクリプトを書く際の重要な側面です。PowerShellは、try、catch、およびfinallyブロックを使用してエラーを優雅に処理するための強力な構造を提供します。これらの構文を使用すると、例外を管理し、エラーが発生した場合でも重要なクリーンアップ作業を実行することができます。このブログ記事では、PowerShellでのtry catch finallyの使い方をお見せします。それでは始めましょう。

Try、Catch、および Finally の理解

このtryブロックには、エラーを引き起こす可能性のあるコードが含まれています。エラーが発生した場合、catchブロックが実行され、エラーを処理できるようになります。finallyブロックはオプションで、エラーが発生したかどうかに関わらず実行されるコードが含まれています。

構文を見てみましょう。

try {
    # Code that might throw an exception
} catch {
    # Code to handle the error
} finally {
    # Code that runs regardless of whether an error occurred
}

ここにあなたが基にできるもう2つの例があります。

Try {
    1/0
}
Catch {
    $_.Exception # Error Message
 }

この例では、エラーが発生した場合、エラーメッセージが表示されます。あなたは、$_ 変数をパイプライン変数として知っているかもしれません。

そして、ここにもう一つの例があります。それはもっと実用的で、実際の世界のシナリオです。

$ErrorActionPreference="Stop"
Try {
    Get-ChildItem -Path C:\notthere
}
Catch {
    Write-Warning "Folder not present."
}

なぜ私が $ErrorActionPreference 変数を使用したのかを尋ねるかもしれません。エラーハンドリングを変更せずに試してみてください!私は動作しません!

この例では、ErrorActionPreferenceをStopに設定することで、Get-ChildItemコマンドの非終了エラーがキャッチブロックによってキャッチされ、適切なエラー処理が行えるようになります。このエラーは終了エラーではなく、実際には非終了エラーであり、PowerShellはCatchブロックを無視します。

try-catchブロックを使用する際は、エラーがあなたのcatch関数を無視する非終了エラーである可能性があることを常に念頭に置くべきです。