【发布时间】:2016-07-07 16:38:47
【问题描述】:
我正在尝试在 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”参数值传递给命令。但这仅在捕获所有类型的异常时才有效,这是我不想要的,因为如果应用程序池不存在,我希望抛出异常。
更新: 我找到了解决这个问题的方法:只需读出 $_.exception 变量并使用 GetType() 获取真正的异常类型,但在 catch 中使用函数似乎不是正确的方法:
try
{
Stop-WebAppPool $webServerSettings.applicationPool
}
catch
{
if ($_.Exception.GetType().Name -eq "InvalidOperationException")
{
return
}
throw
}
【问题讨论】:
标签: powershell exception try-catch