在powershell脚本中没有捕获System.InvalidOperationException

时间:2016-03-21 08:52:24

标签: powershell exception try-catch

我试图在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()获取真正的异常类型,但是在catch中有一个函数似乎没有正确的方法:

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

1 个答案:

答案 0 :(得分:0)

尝试,

<div class="article-data">

</div>

try { Stop-WebAppPool $webServerSettings.applicationPool -ErrorAction Stop } Catch { "Unable to stop Web App Pool" } 告诉PowerShell在遇到错误时停止;这会抑制您看到的错误输出。