これを試して:
try { $response = Invoke-WebRequest http://localhost/foo } catch {
$_.Exception.Response.StatusCode.Value__}
これが例外をスローするのはちょっと残念ですが、それはそうです。
コメントごとに更新
このようなエラーが引き続き有効な応答を返すようにするには、タイプの例外をキャプチャしてWebException
、関連するをフェッチしResponse
ます。
例外の応答はタイプSystem.Net.HttpWebResponse
であるのに対し、成功したInvoke-WebRequest
呼び出しからの応答はタイプMicrosoft.PowerShell.Commands.HtmlWebResponseObject
であるため、両方のシナリオから互換性のあるタイプを返すには、成功した応答のを取得する必要があります。BaseResponse
これもタイプSystem.Net.HttpWebResponse
です。
この新しい応答型のステータスコード[system.net.httpstatuscode]
は、単純な整数ではなく型の列挙型であるため、明示的にintに変換するか、Value__
上記のようにプロパティにアクセスして数値コードを取得する必要があります。
$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__