Попробуй это:
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__