トップ回答者
例外処理が機能しない場合がある

質問
回答
-
一般的なコマンドレットは、エラー時に例外を投げません。例外が発生するのは、主にオペレータ等の使用に関するミスや .NET のメソッドを呼び出した場合です。
コマンドレットはエラー発生時に ErrorAction に従った動作を行います。エラーが発生したかどうかは、自動変数 $? に記録されます。
詳しくは help about_CommonParameters および about_Automatic_Variables をどうぞ。
- 回答としてマーク 牟田口大介Moderator 2012年11月27日 5:15
すべての返信
-
一般的なコマンドレットは、エラー時に例外を投げません。例外が発生するのは、主にオペレータ等の使用に関するミスや .NET のメソッドを呼び出した場合です。
コマンドレットはエラー発生時に ErrorAction に従った動作を行います。エラーが発生したかどうかは、自動変数 $? に記録されます。
詳しくは help about_CommonParameters および about_Automatic_Variables をどうぞ。
- 回答としてマーク 牟田口大介Moderator 2012年11月27日 5:15
-
スクリプト終了時、規定値に戻すようにすることで対応しようと思います。
ドットスコープでの実行を前提としていないならば、戻す必要はないです。
昔書いたものでよろしければ、http://d.hatena.ne.jp/ladybug/20111201 にちらっと書いてみています。
-
K. Kataokaさんのご回答の通り、コマンドレットのエラーは基本的にはtrapできません、が、裏技的にtrapする方法はあります。以下のスレッドを参照してください。
それと、10/0のような0除算エラーがトラップできない件ですが、これはパースの段階で発生するエラーで、いわゆる文法エラーに近いものであるためのようです。
余談ですが、PowerShell 3.0ではパーサーが一新されたため、その副作用(?)で、10/0のような0除算エラーがtrapできるようになっています。