Windows PowerShell コマンドのエラー アクションを解釈する

完了

PowerShell コマンドでエラーが生成される場合、そのエラーは、"終了エラー" または "終了しない" エラーの 2 種類のいずれかである可能性があります。 終了エラーが発生するのは、Windows PowerShell がエラーの後に処理を続行できないと判断し、コマンドが停止する場合です。 終了しないエラーが発生するのは、Windows PowerShell がエラーの後に処理を続行できると判断する場合です。 終了しないエラーが発生したとき、スクリプトの実行またはパイプラインの実行が続行されます。 終了しないエラーは、終了エラーよりもよく発生します。

次のようなコマンドについて考えてみます。

Get-WmiObject -Class Win32_BIOS -ComputerName LON-SVR1,LON-DC1

コンピューター LON-SVR1 がネットワーク上で使用できないと想定した場合、Get-WmiObject は、そのコンピューターに対してクエリを実行しようとしたときにエラーを生成します。 ただし、そのコマンドは、次のコンピューター LON-DC1 で続行することができます。 したがって、そのエラーは終了しないエラーです。

$ErrorActionPreference

Windows PowerShellには、$ErrorActionPreference という名前の組み込みのグローバル変数があります。 コマンドで、終了しないエラーが生成された場合、コマンドによってその変数がチェックされ、何をすべきかを決定します。 この変数は次の 4 つのいずれかの値になります。

  • Continue は既定値で、エラー メッセージを表示して実行を行するようにコマンドに指示します。
  • SilentlyContinue は、エラー メッセージを表示せず、実行を続行するようにコマンドに指示します。
  • Inquire は、ユーザーに何をすべきかを尋ねるプロンプトを表示するようにコマンドに指示します。
  • Stop は、エラーを終了として扱い、実行を停止するようにコマンドに指示します。

$ErrorActionPreference 変数を設定するには、次の構文を使用します。

$ErrorActionPreference = 'Inquire'

注意

$ErrorActionPreference を使用するときは、十分に注意してください。 これにより、スクリプトがユーザーにとって良くなると考えられるかもしれませんが、トラブルシューティングが困難になる場合もあります。

エラーを管理できるようにスクリプト内でエラーをトラップする場合は、コマンドで Stop アクションを使用する必要があります。 終了エラーのみを捕捉して管理できます。

-ErrorAction パラメーター

すべての Windows PowerShell コマンドには、-ErrorAction パラメーターがあります。 このパラメーターには、エイリアス –EA があります。 パラメーターは、$ErrorActionPreference と同じ値を受け取り、パラメーターはそのコマンドの変数をオーバーライドします。 コマンドでエラーが発生することが予想される場合は、 -ErrorAction を使用して、そのコマンドのエラー アクションを Stop に設定します。 これを行うと、そのコマンドのエラーをトラップして管理できますが、その他のすべてのコマンドは、$ErrorActionPreference 内のアクションを引き続き使用します。 例を示します。

Get-WmiObject -Class Win32_BIOS -ComputerName LON-SVR1,LON-DC1 -ErrorAction Stop

$ErrorActionPreference を変更する唯一の状況は、次のようなメソッドを実行している場合など、Windows PowerShell コマンドの外部でエラーが発生する可能性がある場合です。

Get-Process –Name Notepad | ForEach-Object { $PSItem.Kill() }

この例では、 Kill() メソッドでエラーが発生する可能性があります。 ただし、Windows PowerShell コマンドではないので、-ErrorAction パラメーターはありません。 代わりに、メソッドを実行する前に $ErrorActionPreferenceStop に設定し、メソッドの実行後に変数を Continue に戻します。