web-dev-qa-db-ja.com

スケジュールされたタスクの電子メールでイベントログ情報を取得するにはどうすればよいですか?

アプリケーションで何かが発生したときに電子メールを送信するスケジュールされたタスクがあります。イベントの詳細をメールで送りたいと思います。どうやってするか?

タスクスケジューラを使用するWindowsServer 2008R2の場合。

4
marko

これを達成する唯一の方法は、(私の意見では)少しの回避策です。タスクに対してtwoアクションを作成する必要があります。手順は次のとおりです。

  1. イベントがトリガーされます
  2. 最初のアクションは、関心のあるイベントの詳細のクエリを実行し、それらをファイルに保存します。
  3. 2番目のアクションは、ステップ2で保存したイベントの詳細を電子メールに添付して送信します。

プロセスの詳細は次のとおりです。 http://blogs.technet.com/b/jhoward/archive/2010/06/16/getting-event-log-contents-by-email-on-an-event- log-trigger.aspx

5
pk.

それを達成する唯一の方法ではありません。実際には、少なくともWindows Server2008で機能するはるかに優れた方法があります。

http://www.buit.org/2009/07/16/event-based-triggered-tasks/

要約すると、タスク定義をxmlにエクスポートし、テキストエディターで必要なデータのxpathクエリをいくつか追加し、コマンドラインを更新してから、更新したタスク定義をタスクスケジューラにインポートして戻す必要があります。

エクスポートしたら、xmlファイルを開き、<EventTrigger>ノードを見つけます。

子ノードを作成する<ValueQueries>

<ValueQueries>
    <Value name="EventID">Event/System/EventRecordID</Value>
    <Value name="Channel">Event/System/Channel</Value>
</ValueQueries>

次に、コマンドラインで$(EventID)と$(Channel)を使用してこの値クエリデータを参照できます。私のテストから、電子メールイベントはこれらの値を正しく置き換えません。代わりに、コマンドラインを実行する必要があります。もちろん、イベント内の任意のデータにxpathクエリを追加できます。これらは単なる例です。

また、これらのデータクエリからコマンドラインに特定のデータを渡す際にいくつかの問題が発生する可能性があります(引用符、スラッシュなどのさまざまな文字がコマンドインタープリターの特殊文字と競合する可能性があります)。これを軽減するために、上記で定義した2つのパラメーターを使用し、wevtutilを使用して残りのイベントデータを取得しました。

wevtutil qe "$(Channel)" /q:"*[System[(EventREcordID=$(EventID)]]" /f:xml

次に、アラートを生成したイベントレコードの完全なxmlテキストを使用して必要な操作を実行できます(電子メールの送信、xmlの解析など)。

たとえば、タスクで次のアクションを定義して、イベントxmlをディスクに書き込むことができます。

<Exec>
    <Command>powershell.exe</Command>
    <Arguments>start-transcript -path C:\alertlog.log -append; add-content -path C:\output.txt -value (wevtutil qe "$(Channel)" /q:"*[System[(EventRecordID=$(EventID))]]" /f:xml); stop-transcript;</Arguments>
</Exec>

参照されているブログ投稿について詳しく説明します。

5
hannasm