Invoke-RestMethod的错误处理 - Powershell

时间:2015-04-13 19:34:00

标签: rest http error-handling powershell-v4.0

我有一个使用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,然后告诉它做一些其他事情。

3 个答案:

答案 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
}