如何通过Powershell处理SOAP请求返回的错误码
PowerShell SOAP请求错误码捕获方案
默认
Invoke-WebRequest遇到4xx/5xx类HTTP错误时会直接抛出终止异常,请求成功时返回的响应对象不会包含Exception属性,请求失败时$Response变量根本不会完成赋值,因此你原来的写法不管成功还是失败都无法拿到正确的状态码。
方案1:PowerShell 7+ 简化写法(推荐)
PowerShell 7及以上版本新增了-SkipHttpErrorCheck参数,开启后无论HTTP状态码是否为2xx,都会正常返回响应对象,不会抛出异常:
# 请求时添加-SkipHttpErrorCheck参数 $Response = Invoke-WebRequest -Headers $Headers -Uri $endpoint -Method Post -Body $body -ContentType "text/xml" -OutFile "myData.xml" -SkipHttpErrorCheck # 直接读取状态码 $Status = $Response.StatusCode LogWrite "请求状态码:$Status" # 状态码判断逻辑 if ($Status -ge 400) { # 自定义错误处理逻辑,可读取响应内容排查SOAP错误详情 LogWrite "请求失败,响应内容:$($Response.Content)" }
方案2:兼容PowerShell 5.1 写法
如果使用的是旧版PowerShell 5.1,没有-SkipHttpErrorCheck参数,需要通过try/catch块捕获异常后读取状态码:
try { $Response = Invoke-WebRequest -Headers $Headers -Uri $endpoint -Method Post -Body $body -ContentType "text/xml" -OutFile "myData.xml" -ErrorAction Stop # 请求成功时直接获取状态码 $Status = $Response.StatusCode LogWrite "请求成功,状态码:$Status" } catch { # 捕获异常后从错误对象中读取状态码 $Status = $_.Exception.Response.StatusCode.value__ LogWrite "请求失败,状态码:$Status" # 可选:读取失败响应的SOAP错误内容 $responseStream = $_.Exception.Response.GetResponseStream() $reader = New-Object System.IO.StreamReader($responseStream) $responseBody = $reader.ReadToEnd() LogWrite "错误响应内容:$responseBody" # 其他自定义错误处理逻辑 }
内容的提问来源于stack exchange,提问作者user11825483
相关产品推荐
相关产品推荐

