2009-06-19 18 views
7

PowerShellは.batと.NETの奇妙な組み合わせです。 .batでは、コマンドからのerrorlevelとstderrの出力をチェックします。 .NETでは、例外をキャッチします。PowerShellでエラー処理を行う正しい方法は何ですか?

どのようにしてコマンドレットがエラーを返すのですか?失敗したときに例外を投げたり、$をセットしたりしますか?代わりに?これは設定可能ですか?

PowerShellで呼び出す.NET関数は、常に例外をスローし、シェルによって自動的にキャッチされずにエラーに変換されることも想定しています。あれは正しいですか?

多分、私が本当に尋ねるべきことは、これのすべてを上回る良い記事は何ですか? cmdの.batと.NETの経験を持っている私のような多くのエンジニアのように思えますが、両方ともPoshのこの勇敢な新しい世界で何をしなければならないのか正確には疑問に思っています。

答えて

9

は、-ErrorActionというパラメータがあります。可能な値は、SilentlyContinue、Stop、Continue、またはInquireです。これらのオプションのいずれかに$ errorpreferenceというグローバル変数を指定することもできます。

V1では、トラップキーワードを使用できます。 V2で追加されたトラップとtry/catch/finally構文の主な違いを説明するpretty good, concise articleがあります。ここで

がトラップステートメントを使用しての簡単な例で、最初は、例外のspecifタイプのためであり、第二は、一般的なキャッチされ、すべてのエラー・トラップ

trap {"Other terminating error trapped" } 
trap [System.Management.Automation.CommandNotFoundException] 
     {"Command error trapped"} 
1/$null 
+0

まさに私が必要としていたこと、ありがとう! – scobi

+0

グローバル変数の名前は、$ errorpreferenceではなく、$ ErrorActionPreferenceです。http://blogs.msdn.com/powershell/archive/2008/04/10/erroraction-update.aspx –

0

私はすべてが.Netであると考えます。 .Netで動作するコンセプトのほとんどはPoshで動作するはずです。

エラー処理では、Try..catchを使用できます。エラーを "トラップ"して、エラー状態で実行する独自の命令セットを指定することもできます。

私は非常に、内蔵ヘルプをお勧めします:

個々のコマンドレットの
Get-Help about_Errors 
Get-Help about_Trap 
+0

だから多分それはV2CTP3で削除されましたが、ノーありabout_errorsまたはabout_trap。 Poshは.NET-yです。私はtry-catchなどについて知っていますが、私が持っている質問のいずれかに本当に答えることはできません。 – scobi

関連する問題