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 WebException
i pobrać powiązane Response
.
Ponieważ odpowiedź na wyjątek jest typu System.Net.HttpWebResponse
, podczas gdy odpowiedź z pomyślnego Invoke-WebRequest
wywoł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__