Versuche dies:
try { $response = Invoke-WebRequest http:
$_.Exception.Response.StatusCode.Value__}
Es ist eine Art Mist, dass dies eine Ausnahme auslöst, aber so ist es nun mal.
Update per Kommentar
Um sicherzustellen, dass solche Fehler immer noch eine gültige Antwort zurückgeben, können Sie diese Ausnahmen vom Typ erfassen WebExceptionund die zugehörigen abrufen Response.
Da die Antwort auf die Ausnahme vom Typ ist System.Net.HttpWebResponse, während die Antwort von einem erfolgreichen Invoke-WebRequestAufruf vom Typ ist Microsoft.PowerShell.Commands.HtmlWebResponseObject, müssen wir die erfolgreichen Antworten verwenden BaseResponse, die ebenfalls vom Typ sind, um einen kompatiblen Typ aus beiden Szenarien zurückzugeben System.Net.HttpWebResponse.
Der Statuscode dieses neuen Antworttyps ist eine Aufzählung vom Typ [system.net.httpstatuscode]und keine einfache Ganzzahl. Sie müssen ihn also explizit in int konvertieren oder Value__wie oben beschrieben auf seine Eigenschaft zugreifen , um den numerischen Code zu erhalten.
$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__