Thử đi:
try { $response = Invoke-WebRequest http://localhost/foo } catch {
$_.Exception.Response.StatusCode.Value__}
Thật là một điều ngớ ngẩn khi điều này ném ra một ngoại lệ nhưng nó là như vậy.
Cập nhật mỗi nhận xét
Để đảm bảo rằng các lỗi như vậy vẫn trả về phản hồi hợp lệ, bạn có thể nắm bắt các loại ngoại lệ đó WebExceptionvà tìm nạp liên quan Response.
Vì phản hồi trên ngoại lệ là loại System.Net.HttpWebResponse, trong khi phản hồi từ Invoke-WebRequestcuộc gọi thành công là loại Microsoft.PowerShell.Commands.HtmlWebResponseObject, để trả về loại tương thích từ cả hai tình huống, chúng ta cần lấy phản hồi thành công BaseResponse, cũng thuộc loại System.Net.HttpWebResponse.
Mã trạng thái của loại phản hồi mới này là một kiểu enum [system.net.httpstatuscode], thay vì một số nguyên đơn giản, vì vậy bạn phải chuyển đổi nó thành int hoặc truy cập thuộc Value__tính của nó như được mô tả ở trên để lấy mã số.
$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__