我有一个使用Skytap API(REST)的powershell脚本。我想抓住错误,如果有错误,并尝试显示它。
例如,我们正在更改IP:
Invoke-RestMethod -Uri https://cloud.skytap.com/configurations/XXXXXX/vms/YYYYYY/interfaces/ZZZZZZ?ip=10.0.0.1 -Method PUT -Headers $headers
如果在其他地方使用IP,我将得到409冲突错误(请求格式正确,但与其他资源或权限冲突)。
我想检查错误是否为409,然后告诉它做一些其他事情。
答案 0 :(得分:49)
这有点尴尬,但据我所知,只有使用.NET的WebRequest和ConvertFrom-Json(或者您期望的任何数据格式),这是唯一可以做到这一点的方法。
try {
Invoke-RestMethod ... your parameters here ...
} catch {
# Dig into the exception to get the Response details.
# Note that value__ is not a typo.
Write-Host "StatusCode:" $_.Exception.Response.StatusCode.value__
Write-Host "StatusDescription:" $_.Exception.Response.StatusDescription
}
答案 1 :(得分:0)
由于abhinavsingh003在https://github.com/PowerShell/PowerShell/issues/2193上找到了另一个答复!
Try {
$WebRequestResult = Invoke-RestMethod -Uri $URL -Headers $Headers -Body $BodyJSON -Method $Method -ContentType $ContentType -SkipCertificateCheck
Write-Host $WebRequestResult
} Catch {
if($_.ErrorDetails.Message) {
"----WebResponseError----"
Write-Host $_.ErrorDetails.Message;
} else {
#UsualException
$_
}
}
您可能会从i9shankar的网站中找到正确的Invoke-RestMethod / Invoke-WebRequest Powershell BitBucket项目: https://github.com/i9shankar/ps-bitbucket/blob/88edaf469014da16179bb7b215f3fbad04bf2373/Private/Invoke-BitBucketWebRequest.ps1
答案 2 :(得分:0)
特殊变量 $?
将解决这个问题。它将询问上一个命令的结果代码。
Invoke-RestMethod -Uri https://cloud.skytap.com/configurations/XXXXXX/vms/YYYYYY/interfaces/ZZZZZZ?ip=10.0.0.1 -Method PUT -Headers $headers
if (!$?) {
throw $_.ErrorDetails.Message
}