$Error変数
PowerShellではエラーが発生するごとに、そのエラー内容を保存している変数があります。この変数は$Error
という自動変数で、配列型となっています。
また、この変数に格納できる最大要素数は自動変数$MaximumErrorCount
で決められており、256のエラー(規定値)を保持します。
では、実際にエラーを発生させて$Error
変数がどのように変わっていくのかを見てみます。(PowerShellを立ち上げていた方は、念のため起動し直してから始めてください)
まずは、PowerShell立ち上げ時点の$Error
変数の内容を確認しておきましょう。
PS C:\Work> $Error PS C:\Work>
この時点でエラーは発生していないので、何も格納されていません。下記のように入力して、エラーを発生させます。
PS C:\Work> dir HOGE Get-ChildItem : パス 'C:\Work\HOGE' が存在しないため検出できません。 発生場所 行:1 文字:4 + dir <<<< HOGE
エラーを発生させた後の$Error
変数を確認してみます。
PS C:\Work> $Error Get-ChildItem : パス 'C:\Work\HOGE' が存在しないため検出できません。 発生場所 行:1 文字:4 + dir <<<< HOGE
上記のように、先ほど発生した内容が格納されていることが分かります。
$Error
は配列なので、要素数の変化について確認してみます。要素数はCount
プロパティで確認することができます。
PS C:\Work> $Error.Count 1
エラーは1つしか発生していないので、要素数は"1"となります。
次に、もう1つエラーを発生させてみましょう。
PS C:\Work> mkdir HO*GE2 New-Item : パスに無効な文字が含まれています。 発生場所 行:1 文字:34 + param([string[]]$paths); New-Item <<<< -type directory -path $paths
この状態で$Error
変数の内容を確認してみると
PS C:\Work> $Error New-Item : パスに無効な文字が含まれています。 発生場所 行:1 文字:34 + param([string[]]$paths); New-Item <<<< -type directory -path $paths Get-ChildItem : パス 'C:\Work\HOGE' が存在しないため検出できません。 発生場所 行:1 文字:4 + dir <<<< HOGE
少し見づらいですが、2つのエラーが格納されていることが分かります。
$Error
変数は配列なので、下記のように要素番号を指定して1つずつエラーを取り出すことができます。
PS C:\Work> $Error[0] New-Item : パスに無効な文字が含まれています。 発生場所 行:1 文字:34 + param([string[]]$paths); New-Item <<<< -type directory -path $paths
また$Error
変数は、新しいエラーが発生すると常に$error[0]
へ書き込みます。以前に$error[0]
に代入されていたエラーは$error[1]
へ、$error[1]
のエラーは$error[2]
へと移動します。
このことから、最新のエラーは$error[0]
を参照すればよいことが分かります。