SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

Windows PowerShell 入門

Windows PowerShell 入門(9)-エラー編

エラーのリダイレクト、エラーの変数とオブジェクト、例外処理

  • X ポスト
  • このエントリーをはてなブックマークに追加

$?変数

 この変数は、最後に実行したコマンドの実行状態を保持するブール変数です。直前の処理が成功した場合には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"と入力してください。)

次のページ
例外処理をする

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
Windows PowerShell 入門連載記事一覧

もっと読む

この記事の著者

HIRO(ヒロ)

HIRO's.NETのHIROです。とある半導体工場のSEです。VB.NET, C#, PowerShellによるプログラミングを楽しんでいます。最近はBlog でPowerShellについて書いています。2008/07/07にPowerShell from Japan!!というサイトを立ち上げまし...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/2811 2008/08/25 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング