Powershell问题尝试并抓住

时间:2019-06-30 23:41:59

标签: powershell

PowerShell的新功能。我正在使用Power Shell调用API,并将响应保存在示例文件中。

工作正常。挑战是如果API遇到一些挑战(关闭等)..没有响应等,该怎么办。在这种情况下,我不想保存我的文件。现在,它正在保存错误文件。

尝试了很多尝试,但是找不到错误代码。

try
{


    $uri = "https://my url"
    $response = Invoke-RestMethod -Uri $uri
    $response.Save("C:\Users\rtf\Desktop\Details\samplet.xml")
    Write-Host "done"

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

以上代码基于此堆栈溢出answer

1 个答案:

答案 0 :(得分:0)

如上面的注释所述,您必须定义ErrorPreference cmdlet的Invoke-RestMethod。可以通过-ErrorAction参数(并将其值设置为Stop)或通过$ErrorPreference“全局”变量来完成。

来自devblog

  

实际上,这意味着如果发生错误并且Windows PowerShell可以从中恢复,它将尝试执行下一个命令。但这会通过向控制台显示错误来让您知道发生了错误。

因此,对于non-terminating错误,您必须定义PowerShell是停止执行还是继续执行。

以下代码将ErrorAction设置为Stop,因此将捕获一个非终止错误。 PowerShell何时会检测到终止错误,或者什么是终止错误?例如,如果内存不足,或者PowerShell检测到语法错误。

Invoke-RestMethod文档以来:

  

Windows PowerShell根据数据类型设置响应的格式。对于RSS或ATOM提要,Windows PowerShell返回Item或Entry XML节点。对于JavaScript对象表示法(JSON)或XML,Windows PowerShell将内容转换(或反序列化)为对象。

$response可能包含PowerShell尝试解析的XML或JSON(或其他特定内容)。

Update1:​​根据下面的注释指出一条错误消息,$response包含PowerShell转换的XML。最后,$response应该具有Error status属性,以防发生错误。借助Get-Member,我们可以检查$response是否包含错误属性并执行其他错误处理。

try
{
     $uri = "https://my url"
     $response = Invoke-RestMethod -Uri $uri -ErrorAction Stop
     # Was a valid response object returned? 
     if ($null -ne $response) {

        # Has the object an REST-API specific Error status property?
        if(Get-Member -inputobject $response-name "UnknownResult" -Membertype Properties){
            Write-Error "response contains error $response"
             Write-Error "$($response.UnknownResult.Error.Message)" 
        }
        else {
            # No error detected, save the response
            $response.Save("C:\Users\rtf\Desktop\Details\samplet.xml")
            Write-Host "done" -ForegroundColor Magenta
        }
     }
}
catch
{
     $_.Exception
}

您可以在此link下使用xml代码。