2016-03-21 48 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停止也不会显示信息时,正在抛出另一种类型的异常,这不是我想要的。 –

相关问题