我正在尝试使用PowerShell编写一个脚本来监视Windows服务器中的URL。以下是脚本。我使用了三个网址来查看回复。 预期结果是
http://google.com
- 应该失败,因为HTTP将被重定向到HTTPS,但我得到了200作为响应。https://google.com
- 应该取得成功并取得成功。https://yahoo.com
- 应该失败,因为代理会阻止雅虎。但有趣的是我获得了所有3个网址的成功。 https://google.com
在某种程度上是可以接受的,但是在雅虎的情况下,代理服务器在网站被阻止时抛出错误页面,但是下面的代码将代理错误页面视为成功,并将其显示为成功但有错误。
请告诉我哪种方法可以在PowerShell中获取HTTP响应代码。
$sites = @(
"http://www.google.com",
"https://www.google.com",
"https://www.yahoo.com"
)
foreach ($url in $sites) {
$HTTP_Request = [System.Net.WebRequest]::Create("$url")
$HTTP_Response = $HTTP_Request.GetResponse()
$HTTP_Status = [int]$HTTP_Response.StatusCode
if ($HTTP_Status -eq 200) {
Write-Host "$url" " is OK!"
} else {
Write-Host "$url" " may be down, please check!"
}
$HTTP_Response.Close()
}
答案 0 :(得分:0)
您的代理需要身份验证,因此您甚至无法从https://www.yahoo.com
获得HTTP响应。由于您未提供代理凭据,因此调用$req.GetResponse()
会引发错误,变量$HTTP_Response
将保留其上一次迭代的值(来自https://www.google.com
的响应)。这就是为什么你觉得这个网址没问题。
GetResponse()
引发的错误并在发生错误时将$HTTP_Status
设置为200以外的值:
foreach ($url in $sites) {
$HTTP_Request = [Net.WebRequest]::Create($url)
try {
$HTTP_Response = $HTTP_Request.GetResponse()
$HTTP_Status = $HTTP_Response.StatusCode.value__
} catch {
$HTTP_Status = 0
} finally {
if ($HTTP_Status -eq 200) {
Write-Host "$url is OK!"
} else {
Write-Host "$url may be down, please check!"
}
}
}