PowerShell:
エラー処理

方法:

# 例外を処理する基本的なTry-Catch
try {
    # エラーを引き起こす可能性があるコード
    $result = 1 / 0
} catch {
    # エラーが発生した場合の対処方法
    Write-Host "おっと、エラーが発生しました: $_"
}

# カスタムエラーメッセージの出力
try {
    Get-Item "nonexistentfile.txt" -ErrorAction Stop
} catch {
    Write-Host "ファイルが見つかりませんでした。"
}

# 最後のエラーを調べるための$Error変数の使用

深く掘り下げて

PowerShellはMonadとして初めて登場して以来、長い道のりを歩んできました。エラー処理は時間と共により堅牢になり、C#のような他のプログラミング言語と似た機能を提供するようになりました。try-catch-finally構文はそのような他の言語からの影響を受けたものの一つです。それ以前には、スクリプターは条件のチェックや$Error自動変数の使用に大きく依存していました。

PowerShellには、終了エラーと非終了エラーという2つの主要なエラータイプがあります。終了エラーはtry-catchブロックで捕捉されない限りスクリプトを停止させますが、非終了エラーは-ErrorAction Stopを指定しない限り停止させません。この区別は、エラーがスクリプト全体を停止するほどのものか、単に記録して無視できるものかを決める上で不可欠です。

PowerShellのエラー処理では、finallyブロックも利用できます。これは何が起ころうとも-エラーが発生したかどうかに関わらず-実行されます。クリーンアップタスクに最適です。

スクリプトを深く掘り下げるときには、さらに細かい制御が可能となり、特定の例外タイプを扱うことができます。

また、古い方法として、例外をスローすることなくエラーをキャプチャするための-ErrorVariableパラメータや、最後の操作が成功したかどうかを教えてくれる$?変数もあります。彼らは便利なツールですが、しっかりしたtry-catchに比べれば少し整理されていない感じがします。

参照