У меня есть модуль PowerShell, который работает с Windows PowerShell 5.1.Это сильно зависит от командлетов Invoke-WebRequest
и Invoke-RestMethod
, которые имеют некоторые довольно значительные изменения между 5.1 и PowerShell Core 6.
Мне уже удалось заставить большую часть кода работать между выпусками (Desktop / Core), но последнее, с чем у меня возникают проблемы, - это обработка исключений, возникающих при ответах на ошибки HTTP.Существующий код выглядит более или менее следующим образом.
try {
$response = Invoke-WebRequest @myparams -EA Stop
# do more stuff with the response
} catch [System.Net.WebException] {
# parse the JSON response body for error details
}
Я не обязательно хочу перехватывать любые исключения, кроме тех, которые генерируются из-за сбоя кодов ответов HTTP с сервера.Тип исключения, возвращаемый в редакции Core, отличается от версии для настольных компьютеров и требует отдельных путей кода для анализа ответа.Итак, изначально я попробовал это:
try {
$response = Invoke-WebRequest @myparams -EA Stop
# do more stuff with the response
} catch [System.Net.WebException] {
# Desktop: parse the JSON response body for error details
} catch [Microsoft.PowerShell.Commands.HttpResponseException] {
# Core: parse the JSON response body for error details
}
Это прекрасно работает при работе в Core.Но при запуске в Desktop я получаю ошибку Unable to find type [Microsoft.PowerShell.Commands.HttpResponseException]
.
Какой лучший способ обойти это?Нужно ли просто перехватывать все исключения, сопоставлять строки в типе и повторно выдавать то, что мне не нужно?Есть ли более элегантный способ, который мне не хватает, который не предусматривает выпуск отдельных версий модуля для настольных и базовых версий PowerShell?