失敗時にWindowsタスクスケジューラに通知する


65

ウェブサイトからローカルコンピューターにバックアップを取得する自動スクリプトがあります。このスクリプトは失敗する可能性があります。サーバーがダウンしたら、スクリプトを誤って移動しました。

スクリプトが失敗する(または実行されない/見つからない)ことをWindowsタスクスケジューラに通知させるにはどうすればよいですか?

プロンプトが表示されても、メールやデスクトップに表示されるものでも構いません。何か問題が発生した場合は通知を受け取りたいです。私のサーバーでは、crontabからエラーに関するメールが届きます-これはすばらしいことです。Windows 7ローカルコンピューターにそのようなものが欲しい。


タスクスケジューライベントIDが少なくともmnaoumov.wordpress.com/2014/05/15/task-scheduler-event-ids

回答:


87

スケジュールされたタスクの開始に失敗すると、イベントがTaskSchedulerイベントログに書き込まれます。

注:タスクスケジューラログは(管理ツールの下)にあります

 Computer Management
    System Tools
       Event Viewer
          Application and Services Logs
             Microsoft
                Windows
                   Task Scheduler
                      Operational

ここに画像の説明を入力してください

Windowsは、あなたがすることができますトリガなど、様々なイベントが発生したときに開始するようにスケジュールされたタスクを:

  • 時刻
  • システムの起動
  • ユーザーログイン
  • イベントログに記録されたイベント

この知識を活用して、スケジュールされたタスクが失敗したときに実行されるスケジュールされたタスクを作成できます。

ここに画像の説明を入力してください

このスケジュールされたタスクのアクションは、アラートを送信するものに設定することができます-選択した方法(シャットダウンのトリガーなど)で。電子メールを送信したい場合があります。

ここに画像の説明を入力してください

これは、Windowsがすべてを処理する方法です。ログに表示されるイベントでトリガーされる多くの診断タスクを確認できます。たとえば、IPアドレスの競合が検出されると、イベントがログに書き込まれます。

  • ログ:システム
  • ソース: Tcpip
  • イベントID: 4198

スケジュールされたタスクは、このイベントでトリガーされ、プログラムを実行してそのことを通知し、修正します。イベントIDは1つのタスクだけに固有のものではないことに注意してください。イベント203を生成するタスク-アクションの開始に失敗すると、このタスクがトリガーされます。


2
イベントログ(203および103)からイベントIDを取得します。スクリーンショットでイベントIDを確認できます(203および103)。または私はあなたのイベントIDを伝えることができます:203と103
イアン・ボイド

5
2番目のタスクが失敗した場合はどうしますか!?!?
ウィリアムジャクソン

3
@WilliamJacksonマシンをシャットダウンするイベントを作成します。そうすれば、誰かが間違いなく問題に気付くでしょう。
イアン・ボイド

11
実際、2番目のタスクが失敗すると、2番目のタスクが起動し、2番目のタスクが起動し、2番目のタスクが起動します。私はこれを困難な方法で見つけました= /
ロブペンリッジ

6
これはタスクが失敗した場合に警告しません、開始失敗した場合のみ。まったく同じことではありません。
jwg

11

バックアップジョブの値が0より大きい場合に警告するスクリプトは次のとおりです。

$ScheduledTaskName = "Hans\Backup"
$Result = (schtasks /query /FO LIST /V /TN $ScheduledTaskName  | findstr "Result")
$Result = $Result.substring(12)
$Code = $Result.trim()

If ($Code -gt 0) {
    $User = "mymail@gmail.com"
    $Pass = ConvertTo-SecureString -String "myPassword" -AsPlainText -Force
    $Cred = New-Object System.Management.Automation.PSCredential $User, $Pass
################################################################################

$From = "Alert Scheduled Task <mymail@gmail.com>"
$To = "Me Gmail <mymail@gmail.com>"
$Subject = "Scheduled task 'Backup' failed"
$Body = "Error code: $Code"
$SMTPServer = "smtp.gmail.com"
$SMTPPort = "587"

Send-MailMessage -From $From -to $To -Subject $Subject `
-Body $Body -SmtpServer $SMTPServer -port $SMTPPort -UseSsl `
-Credential $Cred
}

現在選択されている回答では非推奨のWindows機能が使用されるため、これは適切なオプションです。
ジョンハーグローブ

これは、Windowsを英語で使用するユーザー向けに特別に作成されたソリューションであることに注意してください。「findstr」の引数は、Windowsで設定されているユーザーの言語に応じて変更する必要があります。
Eda190

7

見てくださいPushMonを。スクリプトの最後に呼び出されるPushMon URLを作成できます。サーバーがダウンしたか、スクリプトが移動されたためにスクリプトが実行されない場合は、通知されます。メール、SMS、電話、IM、Twitterで通知を受け取ることができます。これはどのオペレーティングシステムでも機能します。これはPingdomに似ていますが、スクリプトとバックグラウンドタスク用です。


1
スクリプトの最後に追加し、スクリプトが見つからない(移動するなど)場合、どのように呼び出されるのですか?
ボブ

3
スクリプトが移動し、URLが呼び出されなかったため、アラートが表示されます。
ビエンベニドデビッド

1
自分のサイトにアクセスしようとしています。皮肉なことに、それはダウンしているようだ..
アイザッククラインマン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.