Invoke-RestMethod 的错误处理 - Powershell
Error Handling for Invoke-RestMethod - Powershell
我有一个使用 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,然后告诉它执行其他操作。
这有点尴尬,但据我所知,这是唯一的方法,无需执行更复杂的操作,例如使用 .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
}
我知道你要求 Powershellv4,但是因为 v6/v7 :
Try {
$WebRequestResult = Invoke-RestMethod -Uri $URL -Headers $Headers -Body $BodyJSON -Method $Method -ContentType $ContentType -SkipCertificateCheck
} Catch {
if($_.ErrorDetails.Message) {
Write-Host $_.ErrorDetails.Message
} else {
Write-Host $_
}
}
特殊变量$?
将解决这个问题。它代表 $LASTEXITCODE = 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
}
我有一个使用 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,然后告诉它执行其他操作。
这有点尴尬,但据我所知,这是唯一的方法,无需执行更复杂的操作,例如使用 .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
}
我知道你要求 Powershellv4,但是因为 v6/v7 :
Try {
$WebRequestResult = Invoke-RestMethod -Uri $URL -Headers $Headers -Body $BodyJSON -Method $Method -ContentType $ContentType -SkipCertificateCheck
} Catch {
if($_.ErrorDetails.Message) {
Write-Host $_.ErrorDetails.Message
} else {
Write-Host $_
}
}
特殊变量$?
将解决这个问题。它代表 $LASTEXITCODE = 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
}