В Powershell v3.0 я хотел бы вернуть код ответа из HTTP GET, например 200 OK
или 500 Internal Server Error
. (Это для взлома-развертывания, чтобы быстро развернуть развернутый сайт и посмотреть, работает ли он, своего рода мини-приемочный тест. Код состояния - это все, что я хочу.)
Против моих пожеланий HttpWebRequest.GetResponse
выдает сообщение об ошибке, когда он получает 500 Internal Server Error
. Это раздражает, потому что это не ошибка для меня в моем случае использования. Во всяком случае, я решил, что могу поймать исключение и все еще очистить базовый код ответа, но у меня проблемы с этим.
Вот несколько почти рабочий код:
function WebResponseStatusCode (
[Parameter(Mandatory=$true)][string] $url
) {
$req = [system.Net.HttpWebRequest]::Create($url)
try {
$res = $req.GetResponse();
$statuscode = $res.statuscode;
}
catch [System.Net.WebException] {
#the outer error is a System.Management.Automation.ErrorRecord
Write-Host "error!"
return = $_.Response.statuscode; #nope
}
finally {
if (!($res -eq $null)) {
$res.Close();
}
}
return $statuscode;
}
Проблема, конечно, в том, что $_
не имеет свойства Response
. Также $_.InnerException
, даже при нажатии:
return [System.Net.WebException]($_.InnerException)
Я играл с $_ | Get-Member
и изучал все его свойства. Я думал, что у $_.TargetObject
есть некоторые обещания, но это не похоже на.
(Обновить). Я также думаю, что я пробовал варианты на $_.Exception.Response
, хотя, возможно, неправильно.
Получение просто кода ответа кажется таким простым делом.