[英]Powershell don't catch exception from NewWebServiceProxy
我在从 NewWebServiceProxy cmdlet 捕获异常时遇到问题
try {
$myService = New-WebServiceProxy -Uri "http://localhost/someservice.svc"
}
catch {
Write-Log ([string]::Format("Error : {0}", $_.Exception.Message))
}
当我运行它时,我得到这个未处理的异常:New-WebServiceProxy:
请求失败,状态为 HTTP 404:未找到。 在 C:\Users\SomeUser\AppData\Local\Temp\d052b604-38ad-4827-b952-4ebc66e79c69.ps1:2 char:18 + $myService = New-WebServiceProxy -Uri
"http://localhost/someservice.svc"
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~ + CategoryInfo: ObjectNotFound: (http://localhost/someservice.svc:Uri
) [New-WebServiceProxy], WebExc eption + FullyQualifiedErrorId: WebException,Microsoft.PowerShell.Commands.NewWebServiceProxy
有人会问我为什么 try catch 不捕获这个异常? 感谢您的回答
这是在PowerShell中捕获未处理的异常时最常见的问题之一。 您需要在命令New-WebServiceProxy
使用-ErrorAction Stop
try {
$myService = New-WebServiceProxy -Uri "http://localhost/someservice.svc" -ErrorAction Stop
}
catch [System.Net.WebException]{
Write-Log ([string]::Format("Error : {0}", $_.Exception.Message))
}
更新:要捕获Http异常包括[System.Net.WebException]
如Keith Hill在下面的评论中所述。
对我有帮助的是做一些更像是
try{
New-WebServiceProxy -URI $webURL -ErrorAction Stop
}
catch [System.Net.WebException] {
return [PSCustomObject]@{
SOAPStatus = 'Failed'
SOAPException = $_.Exception.Message
SOAPInnerException = $_.Exception.InnerException.Message
}
}
catch {
return [PSCustomObject]@{
SOAPStatus = 'Failed'
SOAPError = $_.Exception.Message
}
}
通过捕获内部异常,我发现如果有问题,我也会得到 web 响应。 在这些情况下,output 通常是这样的:
SOAPStatus:SOAPException 失败:下载“http://webserviceurl.com:1010/SystemServiceQuery”时出错。
SOAPInnerException:请求失败,状态为 HTTP 401:未经授权。
当然,您随后可以捕获什么类型的 innerexception 并向您的用户等提供更有用的反馈。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.