Мы пытаемся выполнить обработку ошибок в командлете Invoke-WebReqeust
. Обычно используется что-то вроде этого:
Try {
# Invoke-WebRequest ....
}
catch {
$result = $_.Exception.Response.GetResponseStream()
$reader = New-Object System.IO.StreamReader($result)
$reader.BaseStream.Position = 0
$reader.DiscardBufferedData()
$responseBody = $reader.ReadToEnd();
Write-Host $responseBody
}
При обнаружении ошибки будет возвращено следующее String
:
{"Ошибка": "AdmConDataError: Нет (IBDataConflictError: IB.Data.Conflict: MAC-адрес 03: 03: 33: 33: 33: 36 используется в двух фиксированных адресах 10.20.32.1 и 10.20.32.1, которые являются в
та же сеть 10.20.32.0/24.) ",
"code": "Client.Ibap.Data.Conflict",
"текст": "MAC-адрес 03: 03: 33: 33: 33: 36 используется в двух фиксированных адресах 10.20.32.1 и 10.20.32.1, которые находятся в одной сети 10.20.32.0/24."
}
Сейчас мы пытаемся проанализировать String
для Array
или hashtable
для простоты использования. Желаемый результат будет:
@{
Error = 'AdmConDataError: None (IBDataConflictError: IB.Data.Conflict:MAC address 03:03:33:33:33:36 is used in two fixed addresses 10.20.32.1 and 10.20.32.1, which are in the same network 10.20.32.0/24.)'
Code = 'Client.Ibap.Data.Conflict'
text = 'MAC address 03:03:33:33:33:36 is used in two fixed addresses 10.20.32.1 and 10.20.32.1, which are in the same network 10.20.32.0 / 24.'
}
С помощью других постов мы думали о том, чтобы вернуться к regexes
. Но мы не можем понять это правильно. С помощью -match '(?<=\")(.*?)(?=\")'
мы пытались сопоставить все в двойных кавычках, но этого явно недостаточно Есть идеи по поводу лучшего подхода?