Попробуй это:
try { $response = Invoke-WebRequest http:
$_.Exception.Response.StatusCode.Value__}
Это своего рода облом, что это вызывает исключение, но так оно и есть.
Обновление по комментариям
Чтобы гарантировать, что такие ошибки по-прежнему возвращают действительный ответ, вы можете зафиксировать эти исключения типа WebException
и получить связанные Response
.
Поскольку ответ на исключение имеет тип System.Net.HttpWebResponse
, в то время как ответ на успешный Invoke-WebRequest
вызов имеет тип Microsoft.PowerShell.Commands.HtmlWebResponseObject
, для возврата совместимого типа из обоих сценариев нам нужно взять успешный ответ BaseResponse
, который также имеет типSystem.Net.HttpWebResponse
.
Код состояния этого нового типа ответа - это перечисление типа [system.net.httpstatuscode]
, а не простое целое число, поэтому вам нужно явно преобразовать его в int или получить доступ к его Value__
свойству, как описано выше, чтобы получить числовой код.
$response = try {
(Invoke-WebRequest -Uri 'localhost/foo' -ErrorAction Stop).BaseResponse
} catch [System.Net.WebException] {
Write-Verbose "An exception was caught: $($_.Exception.Message)"
$_.Exception.Response
}
$statusCodeInt = [int]$response.BaseResponse.StatusCode
$statusCodeInt = $response.BaseResponse.StatusCode.Value__