Spróbuj tego:
try { $response = Invoke-WebRequest http:
$_.Exception.Response.StatusCode.Value__}
To trochę kłopotliwe, że rzuca to wyjątek, ale tak właśnie jest.
Aktualizuj według komentarzy
Aby upewnić się, że takie błędy nadal zwracają prawidłową odpowiedź, możesz przechwycić te wyjątki typu WebExceptioni pobrać powiązane Response.
Ponieważ odpowiedź na wyjątek jest typu System.Net.HttpWebResponse, podczas gdy odpowiedź z pomyślnego Invoke-WebRequestwywołania jest typu Microsoft.PowerShell.Commands.HtmlWebResponseObject, aby zwrócić zgodny typ z obu scenariuszy, musimy pobrać pomyślną odpowiedź BaseResponse, która również jest typu System.Net.HttpWebResponse.
Kod stanu tego nowego typu odpowiedzi jest wyliczeniem typu [system.net.httpstatuscode], a nie prostą liczbą całkowitą, więc musisz bezpośrednio przekonwertować go na int lub uzyskać dostęp do jego Value__właściwości, jak opisano powyżej, aby uzyskać kod numeryczny.
$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__