在哪里捕获异常?

时间:2015-02-13 20:49:36

标签: powershell try-catch

我有一些基本的内容

C:\脚本\ LIB \网络\ web.ps1

C:\脚本\任务\任务1 \ task1.ps1

其中task1.ps1类似于

. .\Lib\Web\web.ps1

Load-Url "http://server" "username" "password"

和web.ps1看起来像

function Load-URL([string] $url, [string] $username, [string] $password)
{
  $pwd = ConvertTo-SecureString $password -AsPlainText -Force
  $cred = New-Object Management.Automation.PSCredential ($username, $pwd)

  $result = irm $url -cred $cred    
  return $result
}

任何尝试 / 捕获对于可能从 irm 调用中掉出来的异常是加载URL函数或者调用者task1.ps1?我将它作为调用者的关注点,以便它可以决定异常在其上下文中的含义。它可能想要记录或做一些完全不同的事情。对此有何看法?

1 个答案:

答案 0 :(得分:0)

Load-Url可能会更好地理解如何处理Invoke-RestMethod引发的某些异常。如果Load-Url可以通过增加价值的方式处理其中某些内容,那么您应try/catch Load-Url,并处理这些特定异常

有时,针对多种情况抛出相同的异常类,您必须检查catch块中的异常对象。如果是这种情况,并且您不想处理其中的一些异常,那么您可以重新throw例外:

try {
    Invoke-RestMethod #arguments
} catch [Some.Generic.Net.Exception] {
    if ($_.Message -like '*Authentication*') {
        # Fix the issue here
    } else {
        throw $_
    }
}

然后,当调用者在try / catch中调用Load-Url的调用时,它将能够捕获函数未处理的任何异常。