Edit: Я понял вопрос сначала, но оказывается, что вы можете получить заголовок ответа с помощью метода HttpWebResponse.GetResponseHeader()
. Если происходит исключение, метод возвращает HttpWebRequest.GetResponse()
$null
, и вы должны использовать этот код, чтобы получить объект HttpWebResponse, так что вы можете назвать GetResponseHeader()
на нем:
# If an exception occurs, get the HttpWebResponse object from the WebException object
$HttpWebResponse = $Error[0].Exception.InnerException.Response;
Я уверен, что вы» Я хочу придерживаться System.Net.HttpWebRequest
вместо объекта System.Net.WebClient
. Вот пример, подобный тому, что вы, вероятно, уже есть:
# Create a HttpWebRequest using the Create() static method
$HttpWebRequest = [System.Net.HttpWebRequest]::Create("http://www.google.com/");
# Get an HttpWebResponse object
$HttpWebResponse = $HttpWebRequest.GetResponse();
# Get the integer value of the HttpStatusCode enumeration
Write-Host -Object $HttpWebResponse.StatusCode.value__;
Метод GetResponse() возвращает HttpWebResponse
объект, который имеет свойство с именем StatusCode
, что указывает на значение в HttpStatusCode
.NET перечисления. Как только вы получите ссылку на перечисление, мы используем свойство value__
, чтобы получить целое число, связанное с возвращаемым значением перечисления.
Если вы получили нулевое значение из метода GetResponse()
, то вам нужно будет прочитать самое последнее сообщение об ошибке в блоке catch {..}. Свойство Exception.ErrorRecord
должно быть наиболее полезным.
try {
$HttpWebResponse = $null;
$HttpWebRequest = [System.Net.HttpWebRequest]::Create("http://www.asdf.com/asdf");
$HttpWebResponse = $HttpWebRequest.GetResponse();
if ($HttpWebResponse) {
Write-Host -Object $HttpWebResponse.StatusCode.value__;
Write-Host -Object $HttpWebResponse.GetResponseHeader("X-Detailed-Error");
}
}
catch {
$ErrorMessage = $Error[0].Exception.ErrorRecord.Exception.Message;
$Matched = ($ErrorMessage -match '[0-9]{3}')
if ($Matched) {
Write-Host -Object ('HTTP status code was {0} ({1})' -f $HttpStatusCode, $matches.0);
}
else {
Write-Host -Object $ErrorMessage;
}
$HttpWebResponse = $Error[0].Exception.InnerException.Response;
$HttpWebResponse.GetResponseHeader("X-Detailed-Error");
}
http://msdn.microsoft.com/en-us/library/system.net.httpwebrequest.aspx
http://msdn.microsoft.com/en-us/library/system.net.httpstatuscode.aspx
http://msdn.microsoft.com/en-us/library/system.net.httpwebresponse.aspx
Вы уже поймали объект исключения и посмотрел на $ _. Exception.Message недвижимость? И исследовал объект $ _. Exception? –