$?変数
この変数は、最後に実行したコマンドの実行状態を保持するブール変数です。直前の処理が成功した場合にはTrue
、それ以外の場合はFalse
となります。
まずは、この変数の動きを見てみましょう。何もエラーが発生していない状態で、$?
変数の中身を確認すると
PS C:\Work> $? True
上記のようにTrue
を返します。
下記のようにエラー発生させ
PS C:\Work> Get-ChildItem HOGE Get-ChildItem : パス 'C:\Work\HOGE' が存在しないため検出できません。 発生場所 行:1 文字:14 + Get-ChildItem <<<< HOGE
$?
の値を確認すると
PS C:\Work> $? False
上記のようにFalse
を返します。
この$?
変数は特にスクリプトの中で効果を発揮します。
下記はカレントディレクトリに「HOGE」が存在するかを確認していますが、存在しない場合にはエラーが発生します。しかし、2>&1
演算子を利用してエラー内容を$err
変数に書き込むので、エラーメッセージは表示されません。また、エラーが発生しても処理は続行します。
このような場合に$?
を使用することで、直前のコマンドが成功したか否かを確認することが可能となります。
$err = Get-ChildItem HOGE 2>&1 if ($?) {"エラーは発生しませんでした" } else {"エラーが発生しました"}
-ErrorActionパラメータと$ErrorActionPreference変数
PowerShellでは、エラーの表示方法を制御することが可能で
- コマンドレット使用時に発生したエラー
- すべてのエラー
それぞれに対して行うことができます。
コマンドレット使用時のエラー表示を制御するには-ErrorAction
パラメータを、すべてのエラー表示の制御を行うには$ErrorActionPreference
変数を設定します。
設定可能な値は共通です。それぞれについて見ていきます。
continue
デフォルトではcontinue
になっています。エラーが発生した場合はメッセージが出力されます。
エラーの内容は$Error
変数に追加され、$?
変数はFalse
となります。スクリプトは次の行から実行されます。
silentlycontinue
エラーが発生してもメッセージは出力されません。
エラーの内容は$Error
変数に追加され、$?
変数はFalse
となります。スクリプトは次の行から実行されます。
stop
エラーが発生した時点で処理を中止します。
エラーの内容は$Error
変数に追加され、$?
変数はFalse
となります。スクリプトは停止します。
-ErrorActionパラメータの使用方法
このパラメータは、コマンドレット使用時に発生したエラーの表示を制御します。
-ErrorAction
パラメータにcontinue
を設定した場合は、エラーメッセージが出力されます。
PS C:\Work> Get-ChildItem Hoge -ErrorAction "continue" Get-ChildItem : パス 'C:\Work\Hoge' が存在しないため検出できません。 発生場所 行:1 文字:14 + Get-ChildItem <<<< Hoge -ErrorAction "continue"
-ErrorAction
パラメータにsilentlycontinue
を設定した場合は、エラーメッセージが出力されません。
PS C:\Work> Get-ChildItem Hoge -ErrorAction "silentlycontinue" PS C:\Work>
-ErrorAction
パラメータにstop
を設定した場合は、エラーアクション設定によって実行が中止されたことを示すメッセージが表示され、処理を中止します。
PS C:\Work> Get-ChildItem Hoge -ErrorAction "stop" Get-ChildItem : シェル変数 "ErrorActionPreference" が Stop に設定さ れているため、コマンドの実行が停止しました。 パス 'C:\Work\Hoge' が存在しないため検出できません。 発生場所 行:1 文字:14 + Get-ChildItem <<<< Hoge -ErrorAction "stop"
$ErrorActionPreference変数の使用方法
この変数に設定した値は、発生したエラーすべてのエラー表示を制御します。
$ErrorActionPreference
変数への値の設定は、=
演算子の左辺に$ErrorActionPreference
変数を、右側に設定する値を記述します。
試しに$ErrorActionPreference
変数へsilentlycontinue
を設定してみます。
PS C:\Work> $ErrorActionPreference = "silentlycontinue"
この状態で、エラーが発生するコマンドを実行してみます。
PS C:\Work> Get-ChildItem Hoge PS C:\Work>
エラーメッセージは表示されません。
$ErrorActionPreference
変数にsilentlycontinue
を設定した効果が現れていることが分かります。(元に戻すには$ErrorActionPreference="Continue"
と入力してください。)