Как указано в комментарии выше, вы должны определить ErrorPreference
командлета Invoke-RestMethod
. Это можно сделать либо параметром -ErrorAction
(и установив его значение на Stop
), либо переменной $ErrorPreference
global.
С devblog :
На самом деле это означает, что если произойдет ошибка и Windows PowerShell сможет восстановиться после нее, она попытается выполнить следующую команду. Но он сообщит вам об ошибке, отобразив ее на консоли.
Так что для non-terminating
ошибок вы должны определить, должен ли PowerShell остановить выполнение или просто продолжить выполнение.
Ниже кода устанавливается ErrorAction
на Stop
, поэтому будет обнаружена не прекращающаяся ошибка. Когда PowerShell обнаружит завершающую ошибку или что такое завершающая ошибка? Например, если вам не хватает памяти или PowerShell обнаруживает синтаксическую ошибку.
Поскольку документ Invoke-RestMethod документ гласит:
Windows PowerShell форматирует ответ в соответствии с типом данных. Для канала RSS или ATOM Windows PowerShell возвращает XML-элементы Item или Entry. Для JavaScript Object Notation (JSON) или XML Windows PowerShell преобразует (или десериализует) содержимое в объекты.
$response
может содержать XML или JSON (или что-то другое), которые PowerShell пытается проанализировать.
Обновление 1: на основании нижеследующего комментария с сообщением об ошибке $response
содержит XML, который преобразует PowerShell. В конце $response
должно иметь свойство Error status
в случае ошибки. С помощью Get-Member
мы можем проверить, содержит ли $response
свойство error, и выполнить дополнительную обработку ошибок.
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
}
Вы можете поиграть с XML-кодом по этой ссылке .