Prueba esto:
try { $response = Invoke-WebRequest http://localhost/foo } catch {
$_.Exception.Response.StatusCode.Value__}
Es una especie de fastidio que esto arroje una excepción, pero así es.
Actualizar por comentarios
Para asegurarse de que dichos errores aún devuelvan una respuesta válida, puede capturar esas excepciones de tipo WebException
y obtener el relacionado Response
.
Dado que la respuesta a la excepción es de tipo System.Net.HttpWebResponse
, mientras que la respuesta de una Invoke-WebRequest
llamada exitosa es de tipo Microsoft.PowerShell.Commands.HtmlWebResponseObject
, para devolver un tipo compatible de ambos escenarios necesitamos tomar la respuesta exitosa BaseResponse
, que también es de tipo System.Net.HttpWebResponse
.
El código de estado de este nuevo tipo de respuesta es una enumeración de tipo [system.net.httpstatuscode]
, en lugar de un entero simple, por lo que debe convertirlo explícitamente a int, o acceder a su Value__
propiedad como se describe anteriormente para obtener el código numérico.
$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__