我目前正在使用 PowerShell 和任务计划程序来自动执行我目前工作所在的公司的一项任务。此脚本会更新列表,理想情况下每 10 分钟运行一次。我们用来运行此重复脚本的计算机可能会有点不稳定,并且会随机关闭。我正在尝试找到一种方法,当运行脚本的计算机处于离线状态时接收警报。
我想实现此目的的主要方法是每次程序运行时设置一个通知,然后让第二个脚本检查该通知。如果缺少通知表明脚本未运行,它会发送警报。我找到了一个答案,它让我找到了部分答案,但如果机器关闭,我认为它不会起作用。
感谢您花时间帮助解答这个问题。
答案1
我同意其他评论。您需要第二台机器运行连接测试或类似的东西,以检测运行其他代码的机器是否发生故障。这是一个示例 powershell 脚本,如果它没有从另一台机器收到成功的 ping 响应,它会向您发送电子邮件。以下代码假设您使用 0ffice365 邮件/在线交换,但可以更改为您使用的任何代码。
$testComputer = ping 1.1.1.1 -n 1 | select-string "Sent" #replace the 1.1.1.1 with your server that fails
if($testComputer -match 'Sent = 1')
{
write-host("Connection to computer running scheduled task is good.")
}
else
{
write-host("Connection to computer running scheduled task has failed. Check to see if it is offline.")
$computerParamsFailed = "Connection to computer running scheduled task has failed. Check to see if it is offline."
$username="[email protected]" #replace with email
$password=ConvertTo-SecureString "PASSWORDHERE"-AsPlainText -Force #replace what is in quotes with your email password
$mycredentials = New-Object System.Management.Automation.PSCredential ($username, $password)
Send-MailMessage -To [email protected] -subject "Computer has gone offline." -body $computerParamsFailed -UseSsl -Port 587 -SmtpServer smtp.office365.com -From $username -Credential $mycredentials
#change "to" email value
}
可以将其设置为在另一台机器上每 10 分钟运行一次。如果检测到连接,它将不执行任何操作。如果没有收到响应,它将向您发送电子邮件。
答案2
我同意 Worthwelle 的观点。需要有另一台机器来监控运行该脚本的机器的状态。在这种情况下,如果有一台机器足够可靠地监控第一台机器,那么你不妨直接在那台机器上运行脚本。最好的解决方案是……纠正导致运行脚本的机器崩溃的问题,或者干脆更换它。