Server 2008 электронная почта на переменных события


13

Одна из новых функций Server 2008 - возможность прикрепить задачу к определенному событию в журналах событий. Одним из доступных действий является отправка электронной почты через SMTP-сервер.

Это прекрасно работает, однако было бы идеально, если бы в теле сообщения могло быть размещено содержимое события. Я пытался использовать $ eventdescription и% eventdescription%, но это всего лишь выстрелы в темноте. Любое количество поиска в Google не дает результатов.

Кто-нибудь знает возможно ли это?

Обновление : предложение Спаркс ниже - это шаг в правильном направлении, я полагаю, однако этот метод не работает для всех значений. Например, я могу получить RecordID, Severity и Channel, как показано, но я не могу использовать тот же метод, чтобы получить EventID, или, что наиболее важно, описание.

Вот необработанный XML из одного события:

[Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event"]
  [System]
    [Provider Name="DFSR" /] 
    [EventID Qualifiers="16384"]4412[/EventID] 
    [Level]4[/Level] 
    [Task]0[/Task] 
    [Keywords]0x80000000000000[/Keywords] 
    [TimeCreated SystemTime="2009-05-14T18:18:09.000Z" /] 
    [EventRecordID]45692[/EventRecordID] 
    [Channel]DFS Replication[/Channel] 
    [Computer]servername.domain.com[/Computer] 
    [Security /] 
    [/System]
  [EventData]
    [Data]9046C3F4-843E-4A53-B941-4B20764072E5[/Data] 
    [Data]D:\departments\Geomatics\Plan Quality\Data Processing\CG3533017 2009-05-13 KT FIXED[/Data] 
    [Data]D:\departments[/Data] 
    [Data]{26D5F604-E603-4F87-8EC3-DE9A945DA8FD}-v927199[/Data] 
    [Data]Departments[/Data] 
    [Data]domain.ca\files\departments[/Data] 
    [Data]B8242CE2-F5EB-47DA-BA5B-1DD2F7EE3AB9[/Data] 
    [Data]DFAA7A54-66CB-4C31-81A0-0F861382C32C[/Data] 
    [Data]CG3533017 2009-05-13-{26D5F604-E603-4F87-8EC3-DE9A945DA8FD}-v927199[/Data] 
  [/EventData]
 [/Event]

Я пытался использовать ValueQuery для EventData, но он не возвращает данных.


+1 - мы используем это для отправки оповещений с нашего веб-сервера, и я хотел бы получить дополнительную информацию в электронном письме! Я буду следить за этой темой ...
Кит Уильямс

Ответы:


3

Я пошел по этому пути немного по-другому, но этот подход генерирует электронные письма о новых событиях, которые соответствуют пользовательскому фильтру, со всеми деталями событий, включенными в тело письма.

1) Создайте «Пользовательский вид» в окне просмотра событий с желаемым фильтром.

2) Как только у вас появится представление, вы должны увидеть ссылку «Присоединить задачу к этому пользовательскому представлению ...».

Я решил использовать sendMail.exe отсюда ( http://caspian.dotconf.net/menu/Software/SendEmail/ ), который я извлек в C: \ sendmail. Причина в том, что действие Microsoft «Отправить письмо» имеет проблемы с аутентификацией SMTP, а также, очевидно, даже отсутствует в Server 2012.

Так что в моем случае я выбрал «Запустить программу» при присоединении задачи к пользовательскому представлению. Но мы собираемся отредактировать его как XML, так что не беспокойтесь о его заполнении через графический интерфейс.

3) Экспортируйте новую задачу в XML, мы будем редактировать ее позже.

4) Создайте файл 'mail-event.bat' в папке C: \ sendmail со следующими 3 строками:

C:\Windows\system32\wevtutil.exe qe Application /f:text /q:"<QueryList><Query Id='0' Path='Application'><Select Path='Application'>*[System[(EventRecordID=%1)]]</Select></Query></QueryList>" > C:\sendmail\%1.log
C:\sendmail\sendEmail.exe -s <smtp_server> -f <from> -xu <user> -xp <pass> -t <to> -u "<subject>" -o message-file=c:\sendmail\%1.log
del C:\sendmail\%1.log

Очевидно, замените «smtp_server», «from», «user», «pass», «to», «subject» на нужные значения.

Это создаст файл '$ (EventRecordID) .log' в C: \ sendmail со всеми подробностями этого события, отправит его по почте, а затем удалит.

Вы можете проверить, работает ли пакетный файл, зайдя в Event Viewer, открыв событие в журнале приложений, переключившись на вкладку Details, выбрав «XML View», а затем ищите EventRecordID. Скопируйте это целое число, а затем запустите из командной строки:

C: \ sendmail> log-event.bat 53522

Конечно, заменив 53522 значением из узла EventRecordID. Если вы получили письмо, перейдите к вашему счастливому месту.

ПРИМЕЧАНИЕ. Вы могли заметить, что строка «Приложение» несколько раз появляется в командной строке для файла wevtutil.exe - потому что я не могу заставить его работать, указав его прямо в пользовательском представлении, а мой Пользовательский вид оказался подмножеством событий, которые все находятся в журнале приложений. Возможно, вам придется настроить это, чтобы оно работало в вашем случае, например, если вы пытаетесь отправить события из системного журнала.

5) Отредактируйте экспортированный вами XML, мы собираемся внести два изменения:

Сначала добавьте следующий узел «ValueQueries» в XML-файл под узлом «EventTrigger»:

<EventTrigger>
  <Enabled>true</Enabled>
  <Subscription>...snip...</Subscription>
  <ValueQueries>
    <Value name="EventRecordID">Event/System/EventRecordID</Value>
  </ValueQueries>  
</EventTrigger>

ПРИМЕЧАНИЕ. В приведенном выше примере я использовал информацию о подписке, которая будет заполнена на основе созданного вами пользовательского представления. Не копируйте мою «Подписку» в ваш XML!

Во-вторых, замените узел Actions следующим:

<Actions Context="Author">
   <Exec>
     <Command>C:\sendmail\mail_event.bat</Command>
     <Arguments>$(EventRecordID)</Arguments>
   </Exec>
</Actions>

Теперь создайте новое событие в вашем пользовательском представлении, и вы автоматически получите уведомление по электронной почте! Woohoo!


1

У меня нет доступа к серверу 2008 или Vista с машиной , чтобы попробовать это самостоятельно и получить переменную для вас , но эта статья должна быть полезной.

Если вы создадите основную задачу, а затем просмотрите XML задачи, вы должны увидеть все доступные значения.

http://blogs.technet.com/otto/archive/2007/11/09/find-the-event-that-triggered-your-task.aspx


1

Используя документацию по ссылке, предоставленной Sparks, добавьте эту дополнительную строку в XML, экспортированный из планировщика задач, чтобы получить текст вашего события:

<Value name="eventData">Event/EventData/Data</Value>

Также интересно (и, надеюсь, понятно):

<Value name="eventTimeCreated">Event/System/TimeCreated/@SystemTime</Value>

Я нашел это прибегая к помощи "Event / System / EventRecordID"

Затем вы можете ссылаться на переменные $ (eventData) и $ (eventTimeCreated) в своей задаче.

Похоже, что значения задаются пошагово через иерархию XML. Я ожидаю, что вы сможете указать большинство любых частей события, разложив необработанный дамп XML для создания выражения с разделителем-косой чертой.

Похоже, «/ @» является сокращением для пробела в этом синтаксисе.


Просто добавьте это в мои события, посмотрим, сработает ли это в следующий раз, когда возникнет конфликт DFSR. Спасибо за ответ, я буду держать вас в курсе.
Джефф Майлз

1

Вы после данных событий?

Мое требование состояло в том, чтобы отправлять электронную почту всякий раз, когда пул приложений IIS закрывается из-за простоя. Я хотел, чтобы имя пула приложений, которое было закрыто, появилось в сообщении электронной почты.

Это сработало для меня:

<Value name = "appPoolId"> Событие / EventData / Data [@ Name = 'AppPoolID'] </ Value>


1

Я никогда не заканчивал тем, что заставил это работать, и похоже, что для Server 2012 эта функциональность электронной почты была полностью удалена. К сожалению, тупик.


0

Я думаю, что я закончил развивать ваши идеи

<?xml version="1.0" encoding="UTF-16"?>
<Task version="1.3" xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task">
  <RegistrationInfo>
    <Date>2013-02-07T17:30:20.8644895</Date>
    <Author>QA\TimT</Author>
  </RegistrationInfo>
  <Triggers>
    <EventTrigger>
      <Enabled>true</Enabled>
      <Subscription>&lt;QueryList&gt;&lt;Query Id="0" Path="ForwardedEvents"&gt;&lt;Select Path="ForwardedEvents"&gt;*&lt;/Select&gt;&lt;/Query&gt;&lt;/QueryList&gt;</Subscription>
      <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>
  </Triggers>
  <Principals>
    <Principal id="Author">
      <UserId>QA\Administrator</UserId>
      <LogonType>Password</LogonType>
      <RunLevel>LeastPrivilege</RunLevel>
    </Principal>
  </Principals>
  <Settings>
    <MultipleInstancesPolicy>IgnoreNew</MultipleInstancesPolicy>
    <DisallowStartIfOnBatteries>false</DisallowStartIfOnBatteries>
    <StopIfGoingOnBatteries>true</StopIfGoingOnBatteries>
    <AllowHardTerminate>true</AllowHardTerminate>
    <StartWhenAvailable>false</StartWhenAvailable>
    <RunOnlyIfNetworkAvailable>false</RunOnlyIfNetworkAvailable>
    <IdleSettings>
      <StopOnIdleEnd>true</StopOnIdleEnd>
      <RestartOnIdle>false</RestartOnIdle>
    </IdleSettings>
    <AllowStartOnDemand>true</AllowStartOnDemand>
    <Enabled>true</Enabled>
    <Hidden>false</Hidden>
    <RunOnlyIfIdle>false</RunOnlyIfIdle>
    <DisallowStartOnRemoteAppSession>false</DisallowStartOnRemoteAppSession>
    <UseUnifiedSchedulingEngine>false</UseUnifiedSchedulingEngine>
    <WakeToRun>false</WakeToRun>
    <ExecutionTimeLimit>P3D</ExecutionTimeLimit>
    <Priority>7</Priority>
  </Settings>
  <Actions Context="Author">
    <SendEmail>
      <Server>mail.nowhere.com</Server>
      <Subject>$(EventComputer) reports event $(EventID) in $(EventChannel), record $(EventRecordID), severety $(EventSeverity)</Subject>
      <To>admin@nowhere.com</To>
      <From>reporter@nowhere.com</From>
      <Body>$(EventData)
$(Message)</Body>
      <HeaderFields />
      <Attachments />
    </SendEmail>
  </Actions>
</Task>

Пожалуйста, не просто бросьте дамп кода (на трехлетний вопрос), а объясните, что вы сделали.
Свен
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.