Server 2008-E-Mail zu Ereignisvariablen


13

Eine der neuen Funktionen von Server 2008 ist das Anhängen einer Aufgabe an ein bestimmtes Ereignis in den Ereignisprotokollen. Eine der verfügbaren Aktionen ist das Senden einer E-Mail über einen SMTP-Server.

Dies funktioniert sehr gut, es wäre jedoch ideal, wenn der Inhalt des Ereignisses im Nachrichtentext platziert werden könnte. Ich habe versucht, $ eventdescription und% eventdescription% zu verwenden, aber das sind nur Aufnahmen im Dunkeln. Jede Menge Googeln führt zu keinen Ergebnissen.

Weiß jemand, ob das möglich ist?

Update : Der folgende Vorschlag von Sparks ist meines Erachtens ein Schritt in die richtige Richtung, jedoch scheint diese Methode nicht für alle Werte zu funktionieren. Zum Beispiel kann ich die RecordID, den Schweregrad und den Kanal wie gezeigt abrufen, aber ich kann nicht dieselbe Methode verwenden, um die EventID oder vor allem die Beschreibung abzurufen.

Hier ist das unformatierte XML eines Ereignisses:

[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]

Ich habe versucht, eine ValueQuery für EventData zu verwenden, sie gibt jedoch keine Daten zurück.


+1 - wir verwenden dies, um Warnungen von unserem Webserver zu senden, und ich möchte mehr Informationen in der E-Mail! Ich werde diesen Thread im Auge behalten ...
Keith Williams

Antworten:


3

Ich habe das etwas anders gemacht, aber dieser Ansatz generiert E-Mails zu neuen Ereignissen, die einem benutzerdefinierten Filter entsprechen, wobei alle Ereignisdetails im E-Mail-Text enthalten sind.

1) Erstellen Sie in der Ereignisanzeige eine benutzerdefinierte Ansicht mit dem gewünschten Filter.

2) Sobald Sie die Ansicht haben, sollte ein Link zu "Aufgabe an diese benutzerdefinierte Ansicht anhängen ..." angezeigt werden.

Ich habe mich entschieden, sendMail.exe von hier ( http://caspian.dotconf.net/menu/Software/SendEmail/ ) zu verwenden, das ich in C: \ sendmail extrahiert habe. Der Grund dafür ist, dass die Aktion "E-Mail senden" von Microsoft Probleme mit der SMTP-Authentifizierung hat und anscheinend auch in Server 2012 nicht vorhanden ist.

Deshalb habe ich in meinem Fall 'Programm starten' ausgewählt, während ich die Aufgabe an die benutzerdefinierte Ansicht angehängt habe. Aber wir werden es als XML bearbeiten, also mach dir keine Sorgen, dass du es über die GUI ausfüllst.

3) Exportieren Sie die neue Aufgabe nach XML. Wir werden sie später bearbeiten.

4) Erstellen Sie eine Datei 'mail-event.bat' im Ordner C: \ sendmail mit den folgenden 3 Zeilen:

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

Offensichtlich ersetzen Sie 'smtp_server', 'from', 'user', 'pass', 'to', 'subject' durch die gewünschten Werte.

Dadurch wird eine "$ (EventRecordID) .log" -Datei unter C: \ sendmail mit allen Details für dieses Ereignis erstellt, per E-Mail gesendet und anschließend gelöscht.

Sie können testen, ob die Batchdatei funktioniert, indem Sie in der Ereignisanzeige ein Ereignis in Ihrem Anwendungsprotokoll öffnen, zur Registerkarte Details wechseln, 'XML-Ansicht' auswählen und dann nach EventRecordID suchen. Kopieren Sie diese Ganzzahl und führen Sie sie dann über die Befehlszeile aus:

C: \ sendmail> log-event.bat 53522

Natürlich wird 53522 durch den Wert aus dem EventRecordID-Knoten ersetzt. Wenn Sie die E-Mail erhalten, gehen Sie zu Ihrem Happy Place.

GUT BEACHTEN: Möglicherweise ist Ihnen aufgefallen, dass die Zeichenfolge "Anwendung" in der Befehlszeile für "wevtutil.exe" einige Male angezeigt wird. Dies liegt daran, dass ich sie scheinbar nicht zum Laufen bringen konnte, indem ich sie direkt auf die benutzerdefinierte Ansicht und auf "my" zeigte Die benutzerdefinierte Ansicht ist zufällig eine Untergruppe von Ereignissen, die sich alle im Anwendungsprotokoll befinden. Möglicherweise müssen Sie dies anpassen, damit es in Ihrem Fall funktioniert, wenn Sie beispielsweise versuchen, Ereignisse aus dem Systemprotokoll zu mailen.

5) Bearbeiten Sie das von Ihnen exportierte XML. Wir werden zwei Änderungen vornehmen:

Fügen Sie zunächst den folgenden 'ValueQueries'-Knoten in die XML-Datei unter dem' EventTrigger'-Knoten ein:

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

HINWEIS: Oben habe ich die 'Abonnement'-Informationen weggelassen, die basierend auf der von Ihnen erstellten benutzerdefinierten Ansicht ausgefüllt wurden. Kopiere mein 'Abonnement' nicht in dein XML!

Zweitens ersetzen Sie den Knoten Aktionen durch Folgendes:

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

Lassen Sie jetzt ein neues Ereignis in Ihrer benutzerdefinierten Ansicht erscheinen und Sie sollten automatisch eine E-Mail-Benachrichtigung erhalten! Woohoo!



1

Fügen Sie unter Verwendung der Dokumentation in dem von Sparks bereitgestellten Link diese zusätzliche Zeile zu dem aus dem Taskplaner exportierten XML hinzu, um Ihren Ereignistext abzurufen:

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

Auch interessant (und hoffentlich selbsterklärend):

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

Ich fand dieses Googeln "Event / System / EventRecordID"

Sie können dann auf die Variablen $ (eventData) und $ (eventTimeCreated) in Ihrer Task verweisen.

Es sieht so aus, als würden die Werte durch die XML-Hierarchie schrittweise angegeben. Ich würde erwarten, dass Sie in der Lage sind, die meisten Teile des Ereignisses anzugeben, indem Sie den rohen XML-Speicherauszug zerlegen, um einen durch Schrägstriche getrennten Ausdruck zu erstellen.

Es sieht so aus, als ob '/ @' in dieser Syntax eine Abkürzung für ein Leerzeichen ist.


Fügte dies meinen Ereignissen hinzu, wir werden sehen, ob es beim nächsten Mal funktioniert, wenn es einen DFSR-Konflikt gibt. Danke für die Antwort, ich halte dich auf dem Laufenden.
Jeff Miles

1

Bist du nach den Eventdaten?

Meine Anforderung bestand darin, eine E-Mail zu senden, wenn ein IIS-Anwendungspool aufgrund einer Zeitüberschreitung im Leerlauf heruntergefahren wurde. Ich wollte, dass der Name des App-Pools, der heruntergefahren wurde, in der E-Mail-Nachricht angezeigt wird.

Das hat bei mir funktioniert:

<Value name = "appPoolId"> Ereignis / Ereignisdaten / Daten [@ Name = 'AppPoolID'] </ Value>


1

Ich habe dies nie zum Laufen gebracht, und es sieht so aus, als ob diese E-Mail-Funktionalität für Server 2012 vollständig entfernt wurde. Eine Sackgasse leider.


0

Ich glaube, ich habe deine Ideen fertig entwickelt

<?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>

Bitte werfen Sie nicht nur einen Code-Dump (auf eine drei Jahre alte Frage), sondern erklären Sie, was Sie getan haben.
Sven
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.