PowerShell で Try-Catch ブロックを使用してエラーを処理する
-
PowerShell の
$ErrorActionPreference
変数 -
PowerShell の
ErrorAction
共通パラメーター -
PowerShell
try-catch
ブロックを使用する
コード エラーは読みにくいことが多く、スクリプトの何がどこで間違っていたのかを突き止めることはほとんど不可能です。 PowerShell には、エラー処理を改善するためのいくつかのオプションがあります。
この記事では、PowerShell のエラー アクション設定と、PowerShell の Try-Catch
ブロック (および Finally
ブロック) を使用してエラー処理を実行するためにそれらをインターセプトする方法について説明します。
PowerShell の $ErrorActionPreference
変数
設定変数は PowerShell の概念であり、これらの変数はさまざまな方法で PowerShell の動作を変更するために使用されます。 $ErrorActionPreference
変数は、これらの変数の 1つです。
変数 $ErrorActionPreference
は、PowerShell が非終了エラーを処理する方法を制御します。 $ErrorActionPreference
値は、デフォルトで "Continue"
に設定されています。
$ErrorActionPreference
変数が "Stop"
に設定されている場合、PowerShell はすべてのエラーを終了エラーとして扱います。 以下のスニペットを使用して、$ErrorActionPreference
値を変更します。
$ErrorActionPreference = "Stop"
PowerShell の ErrorAction
共通パラメーター
ErrorAction
パラメーターは、$ErrorActionPreference
値が PowerShell セッションに適用される場合、共通パラメーターをサポートするすべてのコマンドに適用されます。 ErrorAction
引数の値は、$ErrorActionPreference
変数の値と同じです。
ErrorAction
パラメーターの値は、$ErrorActionPreference
パラメーターの値よりも優先されます。
コード例:
$ErrorActionPreference = "Continue"
$files = Get-Content .\files.txt
foreach ($file in $files) {
Write-Output "Reading file $file"
# Use the -ErrorAction common parameter
Get-Content $file -ErrorAction STOP
}
変更したコードを実行すると、$ErrorActionPreference
が "Continue"
に設定されていても、エラーが発生するとスクリプトが終了することがわかります。 Get-Content
の PowerShell ErrorAction
パラメーター値が "Stop"
に設定されていたため、スクリプトは終了しました。
PowerShell try-catch
ブロックを使用する
今度は、PowerShell の Try-Catch-Finally
ブロックについて学習します。 PowerShell の 'Try-Capture'
(およびオプションの 'Finally'
) ブロックを使用すると、コードの一部をブロックでラップして問題をキャッチできます。
コード例:
try {
<statement list>
}
catch [[<error type>][',' <error type>]*]{
<statement list>
}
finally {
<statement list>
}
PowerShell で Try
して障害を監視するコードは、Try
ブロックにあります。 Try
ブロックでコードを実行中にエラーが発生した場合、エラーは $Error
変数に保存され、Catch
ブロックに転送されます。
Try
ブロックがエラーを返した場合、Catch
ブロックは実行する手順を提供します。 Try
ステートメントには、複数の Catch
ブロックを含めることができます。
そのコードは、Finally
ブロックの Try
ステートメントの最後にあります。 スクリプトがエラーをカウントしたかどうかにかかわらず、このブロックが実行されます。
単純な Try
ステートメントには、Try
と Catch
の 2つのブロックがあります。 Final
はオプションのブロックです。
不特定の例外をキャッチするには、Capture
オプションを空にする必要があります。 以下のコード例の $ErrorActionPreference
変数部分のスクリプトは、Try Catch
ブロックを使用するように調整されています。
foreach
ステートメントは、下の Try
ブロック内に含まれるようになりました。 'Catch'
ブロックには、エラーが発生した場合に文字列 "An Error Occurred"
を表示するコードが含まれています。
最後に、Finally
ブロック コードは $Error
変数をクリアします。
コード例:
$files = Get-Content .\files.txt
try {
foreach ($file in $files) {
Write-Output "Reading file $file"
Get-Content $file -ErrorAction STOP
}
}
catch {
Write-Host "An Error Occured" -ForegroundColor RED
}
finally {
$Error.Clear()
}
出力:
An Error Occured
Marion specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.
LinkedIn