如果脚本因为计算机关闭而失败,或者脚本认为它运行正常但实际上并非如此,如何触发失败警报?

如果脚本因为计算机关闭而失败,或者脚本认为它运行正常但实际上并非如此,如何触发失败警报?

我目前正在使用 PowerShell 和任务计划程序来自动执行我目前工作所在的公司的一项任务。此脚本会更新列表,理想情况下每 10 分钟运行一次。我们用来运行此重复脚本的计算机可能会有点不稳定,并且会随机关闭。我正在尝试找到一种方法,当运行脚本的计算机处于离线状态时接收警报。

我想实现此目的的主要方法是每次程序运行时设置一个通知,然后让第二个脚本检查该通知。如果缺少通知表明脚本未运行,它会发送警报。我找到了一个答案,它让我找到了部分答案,但如果机器关闭,我认为它不会起作用。

让 Windows 任务计划程序在失败时提醒我

感谢您花时间帮助解答这个问题。

答案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 的观点。需要有另一台机器来监控运行该脚本的机器的状态。在这种情况下,如果有一台机器足够可靠地监控第一台机器,那么你不妨直接在那台机器上运行脚本。最好的解决方案是……纠正导致运行脚本的机器崩溃的问题,或者干脆更换它。

相关内容