试试这个:
try { $response = Invoke-WebRequest http://localhost/foo } catch {
$_.Exception.Response.StatusCode.Value__}
抛出一个异常真是令人讨厌,但这就是事实。
每个评论更新
为确保此类错误仍然返回有效的响应,您可以捕获这些类型的异常WebException
并获取related 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__