Если скрипт завершается сбоем из-за выключения компьютера или скрипт считает, что он работает нормально, но на самом деле это не так, как активировать оповещение о сбое?

Если скрипт завершается сбоем из-за выключения компьютера или скрипт считает, что он работает нормально, но на самом деле это не так, как активировать оповещение о сбое?

В настоящее время я использую PowerShell и планировщик задач для автоматизации задачи для бизнеса, где я сейчас работаю. Этот скрипт обновляет список и в идеале будет запускаться каждые 10 минут. Компьютер, который мы используем для запуска этого повторяющегося скрипта, может быть немного нестабильным и может случайно выключаться. Я пытаюсь найти способ получать оповещения, если компьютер, на котором запущен скрипт, находится в автономном режиме.

Основной способ, который я думаю сделать, это настроить уведомление для каждого запуска программы, а затем сделать так, чтобы второй скрипт проверял уведомление. Если отсутствует уведомление, указывающее на то, что скрипт не был запущен, он отправляет оповещение. Я нашел ответ, который частично приближает меня к ответу, но я не думаю, что это сработает, если машина выключится.

Настроить планировщик заданий Windows на оповещение в случае сбоя

Спасибо, что уделили время и помогли нам с этим вопросом.

решение1

Я согласен с другими комментариями. Вам понадобится вторая машина, запускающая тест подключения или что-то в этом роде к машине, на которой запущен другой код, чтобы обнаружить сбой. Вот пример скрипта powershell, который отправит вам электронное письмо, если не получит успешный ответ на ping от другой машины. Следующий код предполагает, что вы используете 0ffice365 mail/exchange online, но его можно изменить на любой другой.

$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. Должна быть другая машина, которая будет контролировать состояние машины, на которой этот скрипт был запущен. В этом случае, если бы была машина, которая была достаточно надежна, чтобы контролировать первую машину, то вы могли бы просто запустить скрипт на этой машине вместо этого. Лучшее решение... исправить проблему, из-за которой машина, на которой запущен скрипт, вылетала, или просто заменить ее.

Связанный контент