2016-03-21 6 views
0

powershellスクリプトで特定の例外をキャッチしようとしています。残念ながら、これは動作していないようSystem.InvalidOperationExceptionがpowershellスクリプトでキャッチされていない

try 
{ 
    Stop-WebAppPool $webServerSettings.applicationPool 
} 
catch [System.InvalidOperationException] 
{ 

} 

、私はまだこの応答を取得しています:

Stop-WebAppPool : Object on target path is already stopped. 
At F:\Portal.Update.ps1:12 char:2 
+  Stop-WebAppPool $webServerSettings.applicationPool 
+  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    + CategoryInfo   : InvalidOperation: (:) [Stop-WebAppPool], InvalidOperationException 
    + FullyQualifiedErrorId : InvalidOperation,Microsoft.IIs.PowerShell.Provider.StopAppPoolCommand 

与えられた例外は、スクリプトがそれを無視するべきで投げているときにThecodeblockが下に、これを実行しようとしています私が試したいくつかの選択肢があります:

  • 'ErrorAction Stop'パラメータ値をコマンドに渡します。今私はエラーはありませんが、スクリプトが停止します、それは私が望むものではありません。
  • 'ErrorAction SilentlyContinue'パラメータ値をコマンドに渡します。しかし、これは、アプリケーションプールが存在しない場合は、例外をスローする必要があるため、必要のないすべてのタイプの例外をキャッチするときにのみ機能します。

UPDATE:。ただ、本当の例外の型を取得しますが、キャッチに機能を有するようには見えません)($ _例外変数を読み出してメソッドGetTypeで: 私はこの問題を回避する方法を発見行くための正しい方法:

try 
{ 
    Stop-WebAppPool $webServerSettings.applicationPool 
} 
catch 
{ 
    if ($_.Exception.GetType().Name -eq "InvalidOperationException") 
    {  
     return 
    } 
    throw 
} 

答えて

0

は、それがエラーに遭遇したときに停止するようにPowerShellを伝え、

try 
{ 
Stop-WebAppPool $webServerSettings.applicationPool -ErrorAction Stop 
} 
Catch 
{ 
"Unable to stop Web App Pool" 
} 

-ErrorAction Stopをお試しください。これはあなたが見ていたエラー出力を抑制します。

+0

これはうまくいかないようです。私はまだ例外を取得しますが、メッセージには例外がスローされるとSystem.InvalidOperation例外が発生します。 –

+0

2秒であなたが応答したときに何かが見つかりました。私の答えを編集しようとしています –

+0

ErrorAction Stopは、別のタイプの例外がスローされたときに情報を表示しません。 –

関連する問題