B3S
menu close

Windows

タスクスケジューラに登録したタスクが失敗した時に自動でメールを送信する


ヤス

更新日:2021/08/04


やりたいことを調べていると、海外のフォーラムしかなく、英語力のなさに苦労することが多いです。

動作検証環境:Microsoft Windows 64bit [Version 6.1.7601]

タスクが失敗したことを知りたい

タスクスケジューラが便利なため、Windows Serverで数多く利用しているのですが、問題なく稼働していたタスクがある日突然動かなくなっていて、1ヶ月ほど気付かなかったことがありました。

原因は単純な理由だったので、すぐ修正したのですが、今後のことを考えタスクが失敗した時に自動で通知される仕組みがほしいと思い、タスクの失敗時に自動でメールが送信される仕組みを考えました。下記の3つの仕組みで動作します。

自動メール通知の仕組み

  1. タスクスケジューラを作成し、トリガーのカスタムイベントフィルター設定で、タスクの失敗時という条件を設定する
  2. メール送信処理を実行するVBスクリプトを作成する
  3. タスクの失敗時に、実行結果内容を取得してメール送信を実行するバッチファイルを作成し、上記タスクに登録(メール送信処理は上記VBスクリプトが行う)

設定1:タスクの失敗時を検知するタスクの作成

  1. タスクスケジューラにタスク名「タスク失敗時メール送信」という名前で新規作成
  2. 作成したタスクのプロパティを開き、トリガータブでトリガーを新規作成
  3. タスクの開始で「イベント時」に選択し、「設定」で「カスタム」→「新しいイベントフィルター」を選択
  4. 新規に開かれた「新しいイベントフィルター」でXMLタブを選択し、「手動でクエリを編集する」にチェックをして、下記のコードを貼り付ける

コード説明

  • Pathはイベントビューアーの「アプリケーションとサービスログ」→「Microsoft」→「Windows」→「TaskScheduler」→「Operational」を指定してます。
  • タスクの操作完了のイベントIDのが「201」のため条件に追加
  • タスクが正常に完了しなかった場合、リターンコードが「1」のため条件に追加※リターンコードが「1」以外のエラーも存在するが、頻度が少ないため無視
  • 作成中のこのタスクが失敗した場合、処理が無限ループになってしまうので、自身を除く条件を追加

設定2:メール送信処理を実行するVBスクリプトを作成

メールの送信には、Windowsに標準で搭載されているVBスクリプトを使用します。

  1. mail_send.vps」というファイルを作成、下記のソースコードを貼り付ける※メールアドレスやパスワードは環境に応じて変更

設定3:タスクの実行結果内容を取得してメール送信を実行するバッチファイルを作成

  1. mail_send.bat」というファイルを作成、下記のソースコードを貼り付ける
  2. 設定1で作成したタスクのプロパティを開き、操作タブで操作を新規作成
  3. 新規に開かれた「新しい操作」で「プログラムの開始」を選択し、「プログラム/スクリプト」に「mail_send.bat」を選択


    ※メール送信ファイル(mail_send.vbs)はmail_send.batと同じディレクトリに保管してください