我有一些类似的东西
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中时,它将能够捕获该函数未处理的任何异常。