我想做的是一旦网页关闭,重新启动它。服务不会让我们知道它已关闭。 (创作者方面的编程不良),我们仅知道网站关闭后才会关闭。没有警告。没有错误代码,它只是掉下来。我一直在与Invoke-WebRequest
合作。
$URL = "http://test.example.org"
while (!(Invoke-WebRequest -Uri $URL -UseBasicParsing -Method Head -ErrorAction SilentlyContinue)) {
Send-MailMessage -To "admin@example.org" -Body "$URL is down" -Subject "Site Down" -SmtpServer mail.example.org -From "SiteMonitor@Example.org"
Get-Service -ComputerName Example_Server -Name "Website Service" | Stop-Service
sleep 2
Get-Service -ComputerName Example_Server -Name "Website Service" | Set-Service -Status Running
sleep 2
"$(Get-Date)" >> C:\logs\ExampleDown.txt
if (Invoke-WebRequest -Uri $URL -UseBasicParsing -Method Head -ErrorAction SilentlyContinue) {
Send-MailMessage -To "admin@example.org" -Body "$URL is Up" -Subject "Site Up" -SmtpServer mail.example.org -From "SiteMonitor@Example.org"
}
}
我遇到的唯一问题是,当我在站点关闭时对站点执行Invoke-WebRequest
时,它会生成一条错误消息,使脚本每次都无法运行。该错误消息是关于网站无法解析的。我认为while循环将使用布尔值来处理它,并在出现错误消息时执行while循环,因为在if语句中,大多数情况下,错误消息被视为false。
答案 0 :(得分:0)
您可以尝试以下操作:(无双关语)
try {
$response = $null
$LastError = $null
$response = Invoke-WebRequest -Uri http://localhost -OtherParameters
} catch {
$response = $Null
$LastError = $_
}
if ($null -eq $response -or $null -ne $lastError) { "an error occured" }
else {
"$($response.Content)"
}