Спробуйте це:
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__