在哪里捕获异常



我有一些类似的东西

C: \Scripts\Lib\Web\Web.ps1

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

其中task1.ps1看起来有点像

. .LibWebweb.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调用中脱落,这是Load URL函数或调用者task1.ps1的问题?我把它作为调用者的一个关注点,这样它就可以决定异常在它的上下文中意味着什么。它可能想要登录或做一些完全不同的事情。有什么相反的观点吗?

Load-Url可能对如何处理Invoke-RestMethod抛出的某些异常有更好的理解。如果Load-Url可以以增加值的方式处理其中的一些,那么您应该在Load-Url中处理try/catch,并处理那些特定的异常

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

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

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

最新更新