Електронна пошта сервера 2008 на змінні подій


13

Однією з нових особливостей Server 2008 є можливість приєднання завдання до конкретної події в журналах подій. Однією з доступних дій є надсилання електронного листа через SMTP-сервер.

Це чудово працює, проте було б ідеально, якби в тілі повідомлення вміст події міг бути розміщений. Я спробував використовувати $ eventdescription і% eventdescription%, але це лише постріли в темряві. Будь-яка кількість гуглінгу не дає результатів.

Хтось знає, чи можливо це?

Оновлення : пропозиція іскр нижче - це крок у правильному напрямку, я вважаю, однак цей метод, здається, не працює для всіх значень. Наприклад, я можу витягнути 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 є, а також, можливо, навіть немає в сервері 2012.

Тож у моєму випадку я вибрав "Запустити програму", додавши завдання до спеціального перегляду. Але ми будемо редагувати його як XML, тому не хвилюйтеся про заповнення його через GUI.

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 з усіма деталями цієї події, надішле його поштою та видалить.

Ви можете перевірити, чи працює пакетний файл, зайшовши в програму перегляду подій, відкривши подію у вашому журналі журналу програм, перейшовши на вкладку "Деталі", вибравши "Перегляд XML" та шукайте EventRecordID. Скопіюйте це ціле число та запустіть із командного рядка:

C: \ sendmail> log-event.bat 53522

Звичайно, замінивши 53522 значенням з вузла EventRecordID. Якщо ви отримаєте електронний лист, вирушайте до свого щасливого місця.

ПРИМІТКА ДОБРЕ: Ви, можливо, помітили, що рядок "Application" відображається кілька разів у командному рядку для wevtutil.exe - це тому, що я не міг змусити його працювати, вказуючи його безпосередньо на Custom View, а мій Спеціальний перегляд стався підмножиною подій, які знаходяться в журналі журналу додатків. Вам, можливо, доведеться це відрегулювати, щоб він працював у вашому випадку, наприклад, якщо ви намагаєтеся надсилати події з системного журналу, наприклад.

5) Відредагувавши експортований XML, ми внесемо дві зміни:

Спочатку додайте наступний вузол «ValueQueries» у XML під вузлом «EventTrigger»:

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

ПРИМІТКА. У вищесказаному я переніс інформацію про "Підписку", яка буде заповнена на основі створеного вами спеціального перегляду. Не копіюйте мою "Підписку" у ваш XML!

По-друге, замініть вузол "Дії" таким:

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

Тепер спричиніть появу нової події у власному перегляді, і вам слід автоматично отримувати сповіщення електронною поштою! Woohoo!


1

У мене немає доступу до машини Server 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>

Я знайшов цей Google "Подія / Система / EventRecordID"

Потім ви можете посилатися на змінні $ (eventData) і $ (eventTimeCreate) у своєму завданні.

Схоже, що значення задаються шляхом переходу через ієрархію XML. Я б очікував, що ви зможете вказати більшість будь-яких частин події, розклавши необроблений XML-дамп, щоб створити вираз з обмеженою косою рисою.

Схоже, що "/ @" є скороченням символу пробілу в цьому синтаксисі.


Щойно додавши це до моїх подій, ми побачимо, чи спрацює наступний раз, коли буде конфлікт DFSR. Дякую за відповідь, я буду тримати вас у курсі.
Джефф Майлз

1

Ви після даних події?

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

Це працювало для мене:

<Value name = "appPoolId"> Подія / EventData / Дані [@ Name = 'AppPoolID'] </Value>


1

Я ніколи не працював над цим, і, схоже, для сервера 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.