Essayez ceci :
try { $response = Invoke-WebRequest http://localhost/foo } catch {
$_.Exception.Response.StatusCode.Value__}
C'est un peu frustrant que cela déclenche une exception, mais c'est comme ça que ça se passe.
Mise à jour selon les commentaires
Pour vous assurer que de telles erreurs renvoient tout de même une réponse valide, vous pouvez capturer ces exceptions de type WebException
et récupérer la Response
associée.
Puisque la réponse de l'exception est de type System.Net.HttpWebResponse
, tandis que la réponse d'un appel Invoke-WebRequest
réussi est de type Microsoft.PowerShell.Commands.HtmlWebResponseObject
, pour retourner un type compatible dans les deux scénarios, nous devons prendre la BaseResponse
de la réponse réussie, qui est également de type System.Net.HttpWebResponse
.
Le code d'état de ce nouveau type de réponse est une énumération de type [system.net.httpstatuscode]
, plutôt qu'un simple entier, donc vous devez le convertir explicitement en int, ou accéder à sa propriété Value__
comme décrit ci-dessus pour obtenir le code numérique.
#assurez-vous d'obtenir une réponse même si une erreur est renvoyée
$response = try {
(Invoke-WebRequest -Uri 'localhost/foo' -ErrorAction Stop).BaseResponse
} catch [System.Net.WebException] {
Write-Verbose "Une exception a été interceptée : $($_.Exception.Message)"
$_.Exception.Response
}
#ensuite convertir l'énumération du code d'état en int en faisant ceci
$statusCodeInt = [int]$response.BaseResponse.StatusCode
#ou ceci
$statusCodeInt = $response.BaseResponse.StatusCode.Value__