28 окт. 2013 г.

Улучшение Event Viewer Task.

Как известно, функционал Event Viewer-а (Просмотр событий, по-нашему) в Windows Server 2008 позволяет навешивать на факт прихода события действия, такие как послать e-mail сообщение по указанному адресу или запустить заданную программу. Настроить сие можно как на весь лог (System, Application и так далее), так и на отдельный отфильтрованный Custom View. Однако проблема в том, что при создании такого задания нет возможности добавить в тело письма, которое формируется при событии, информацию о собственно событии. 
Однако не все так плохо, и технически Event Viewer такое умеет, и лишь GUI-интерфейс решить подобную задачу не позволяет.
Итак, для создания инфомативного шаблона e-mail, необходимы, очевидно, внутренние переменные Event Viewer-а, которые будут разрешаться в соответствующие событию-триггеру значения. Штатный мастер сделать подобное не позволяет, поэтому открываем Task Scheduler, в котором находим папку Event Viewer Tasks, где должно быть созданное ранее задание, и экспортируем его. На выходе получаем XML-файл, где описаны все внесенные нами при создании этого задания настройки.
Далее следует добавить в XML описания переменных, значения которых нам пригодятся для формирования письма:

  <ValueQueries>
   <Value name="EventChannel">Event/System/Channel</Value>
   <Value name="EventComputer">Event/System/Computer</Value>
   <Value name="EventData">Event/EventData/Data</Value>
   <Value name="EventID">Event/System/EventID</Value>
   <Value name="EventRecordID">Event/System/EventRecordID</Value>
   <Value name="EventSeverity">Event/System/Level</Value>
   <Value name="Message">Event/RenderingInfo/Message</Value>
  </ValueQueries>
Я добавлял это в секцию <EventTrigger>, сразу под <Subscription>. После этого можно использовать определенные переменные в e-mail шаблоне. Например, так:

<Actions Context="Author">
    <SendEmail>
      <Server>mail.example.org</Server>
      <Subject>Event ($(EventID)) from $(EventComputer)</Subject>
      <To>user@example.org</To>
      <From>eventlog@example.org</From>
      <Body>
  $(EventComputer) reports event $(EventID) in $(EventChannel), record $(EventRecordID), severety $(EventSeverity):
  $(EventData)
  $(Message)
   </Body>
      <HeaderFields />
      <Attachments />
    </SendEmail>
  </Actions>
</Task>
Источник мудрости тут.