web-dev-qa-db-ja.com

コンピューターがシャットダウンされたためにスクリプトが失敗した場合、またはスクリプトが正常に機能していると判断したが機能していない場合、失敗アラートをトリガーするにはどうすればよいですか?

現在、PowerShellとタスクスケジューラを使用して、現在勤務しているビジネスのタスクを自動化しています。このスクリプトはリストを更新し、理想的には10分ごとに実行されます。この定期的なスクリプトを実行するために使用するコンピューターは、少しぎこちなく、ランダムにシャットダウンする可能性があります。スクリプトを実行しているコンピューターがオフラインの場合にアラートを受け取る方法を見つけようとしています。

これを行うために私が考えている主な方法は、プログラムが実行されるたびに通知を設定し、2番目のスクリプトに通知をチェックさせることです。スクリプトが実行されなかったことを示す通知がない場合は、アラートを送信します。途中で答えにたどり着く答えを見つけましたが、マシンがシャットダウンしてもうまくいかないと思います。

Windowsタスクスケジューラに失敗時に警告を表示させる

この質問にご協力いただきありがとうございます。

1
HankMorgan

私は他のコメントに同意します。障害を検出するには、他のコードを実行しているマシンへの接続テストまたはある種の何かを実行している2番目のマシンが必要になります。これは、他のマシンから正常なping応答が返されなかった場合に電子メールで送信されるPowerShellスクリプトのサンプルです。次のコードは、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分ごとに実行するように設定できます。接続を検出した場合、何もしません。応答がない場合は、メールが送信されます。

1
Narzard

私はワースウェルに同意します。そのスクリプトが実行されていたマシンのステータスを監視する別のマシンが必要になります。この場合、最初のマシンを監視するのに十分な信頼性のあるマシンがあれば、代わりにそのマシンでスクリプトを実行することをお勧めします。最善の解決策...スクリプトを実行しているマシンがクラッシュする原因となる問題を修正するか、単にスクリプトを置き換えます。

1
ap0th0cary