2016-03-21 44 views
0

正試圖捕獲PowerShell腳本中的特定異常。 Thecodeblock下面是試圖做到這一點,在給定異常被拋出腳本應該忽略它: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 

我嘗試了幾個選項:

  • 將'ErrorAction Stop'參數值傳遞給命令。現在我沒有錯誤,但劇本停止了,那不是我想要的。
  • 將'ErrorAction SilentlyContinue'參數值傳遞給命令。但是這隻會在捕獲所有類型的異常時才起作用,我不想要這些異常,因爲如果應用程序池不存在,我希望拋出異常。

更新: 我找到了一種方法來解決這個問題:剛讀出$ _異常變量,並用的GetType()得到真正的異常類型,但在抓具功能似乎沒有。走正道:

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

回答

0

嘗試,

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

-ErrorAction Stop告訴PowerShell來停止時遇到錯誤;這會抑制您看到的錯誤輸出。

+0

這似乎並不奏效。我仍然得到異常,消息表示拋出的異常是System.InvalidOperation異常。 –

+0

2秒剛剛發現別的東西,你迴應,即將編輯我的答案 –

+0

ErrorAction停止也不會顯示信息時,正在拋出另一種類型的異常,這不是我想要的。 –

相關問題