Server 2008 электронная почта на переменных события
Одной из новых функций 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, но он не возвращает данных.
6 ответов
Я никогда не заканчивал тем, что заставил это работать, и похоже, что для Server 2012 эта функциональность электронной почты была полностью удалена. К сожалению, тупик.
Я пошел по этому поводу немного по-другому, но этот подход генерирует электронные письма о новых событиях, которые соответствуют пользовательскому фильтру, со всеми деталями событий, включенными в тело письма.
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!
Используя документацию по ссылке, предоставленной Sparks, добавьте эту дополнительную строку в XML, экспортированный из планировщика задач, чтобы получить текст вашего события:
<Value name="eventData">Event/EventData/Data</Value>
Также интересно (и, надеюсь, само за себя):
<Value name="eventTimeCreated">Event/System/TimeCreated/@SystemTime</Value>
Я нашел этот Google "Event/System/EventRecordID"
Затем вы можете ссылаться на переменные $(eventData) и $(eventTimeCreated) в своей задаче.
Похоже, что значения задаются пошагово через иерархию XML. Я ожидаю, что вы сможете указать большинство любых частей события, разложив необработанный дамп XML для создания выражения с разделителем-косой чертой.
Похоже, "/@" является сокращением для пробела в этом синтаксисе.
Вы после данных событий?
Моим требованием было отправлять электронное письмо всякий раз, когда пул приложений IIS закрывался из-за простоя. Я хотел, чтобы имя пула приложений, которое было закрыто, появилось в сообщении электронной почты.
Это сработало для меня:
У меня нет доступа к машине с Server 2008 или Vista, чтобы самому попробовать и получить переменную для вас, но эта статья должна быть полезной.
Если вы создадите основную задачу, а затем просмотрите XML задачи, вы должны увидеть все доступные значения.
http://blogs.technet.com/otto/archive/2007/11/09/find-the-event-that-triggered-your-task.aspx
Я думаю, что я закончил развивать ваши идеи
<?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><QueryList><Query Id="0" Path="ForwardedEvents"><Select Path="ForwardedEvents">*</Select></Query></QueryList></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>