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。
答案 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代码。