ファイルチェックでエラーが発生時にPowerShellスクリプトを停止または終了するスクリプト

ファイルチェックでエラーが発生時にPowerShellスクリプトを停止または終了するスクリプトに関するかなり詳しく書かれた情報がありましたので、シェアします。

 

他のプログラミング言語とは異なり、PowerShell スクリプト言語には、終了する場合と終了しない場合の 2 種類のエラー シナリオがあります。これらのタイプのエラーは両方とも「悪い」ものですが、それらを異なる方法で分類することにより、スクリプト作成者はそれらを異なる方法で処理できます。エラーが発生したときに PowerShell スクリプトを停止または終了する場合、この区別は重要です。

 

非終了エラー
たとえば、ファイルが存在するかどうかを確認するスクリプトがあるとします。これを ErrorExample.ps1 と呼びます。このスクリプトは、Test-Pathを使用してファイルが存在するかどうかを確認します。そうでない場合は、 Write-Errorコマンドレットを介してエラーが返されます。Write-Error は常に終了しないエラーを返すため、このエラーは終了しません。

 


 

終了エラー
終了エラーは、PowerShell の 2 番目のタイプのエラーです。終了エラーは例外と考えることができます。例外は、スクリプトを完全に終了させるエラー、または PowerShell が catch ブロックに "スロー" してエラーを処理し、例外をスローした後に必要なアクションを実行するエラーです。

スクリプタが終了エラーを呼び出す方法の 1 つは、throwキーワードを使用することです。この PowerShell コンストラクトは、例外をスローしながら終了エラーを作成します。上記の例を使用して、ファイルが重要であり、存在しない場合はスクリプトの実行を停止したいとします。代わりに、 Write-Error をthrowに置き換えることができます。

 

 

スクリプトがこちら。

 

if (-not (Test-Path -Path C:\DoesNotExist.txt)) {
    throw 'The file does not exist'
} else {
    Write-Host 'The file does exist'
}
Write-Host 'Continuing script regardless if file exists or not...'

 

エラーの違いを理解する必要があります。

 

非終了エラーを終了エラーに変える
すべてのWrite-Error参照および非終了エラーを生成するその他のアクションをthrowステートメントに置き換えるのは難しい場合があります。代わりに、これらの終了しないエラーを生成するコマンドをすべてスクリプトに保持し、それらを終了エラーに「変換」することができます。

すべての非終了エラーを終了エラーに変えたい場合は、$ErrorActionPreference変数をStopに設定することにより、グローバル アクションの変更を実行できます。この自動変数は、非終了エラーの動作を制御します。$ErrorActionPreferenceをStopに設定することで、非終了エラーが発生したすべてのインスタンスを終了として処理するように PowerShell に指示します。このアクションは全面的に適用されます。

ただし、すべての非終了エラーを終了エラーに変更して、代わりに特定のエラーを選択したい場合があります。すべてのコマンドレットと高度な機能に適用される共通パラメーターErrorActionを使用すると、これを実現できます。

この例でも、強制的に終了エラーをスローすることで、Write-Error コマンドレットの動作を実際に "オーバーライド" できます。ErrorAction パラメーターを使用して、Stop に設定します。

 

「引用元」
エラーが発生したときに PowerShell スクリプトを停止または終了する
https://4sysops.com/archives/stop-or-exit-a-powershell-script-when-it-errors/

 

VAV マイナスイオン ドライヤー 風温&風量調節可 1200W 大風量 家用 ヘアドライヤー ヘアケア 折りたたみ式