Courriel du serveur 2008 sur les variables d'événement

13

L'une des nouvelles fonctionnalités de Server 2008 est la possibilité d'attacher une tâche à un événement spécifique dans les journaux des événements. L'une des actions disponibles consiste à envoyer un e-mail via un serveur SMTP.

Cela fonctionne très bien, mais ce serait idéal si dans le corps du message, le contenu de l'événement pouvait être placé. J'ai essayé d'utiliser $ eventdescription et% eventdescription%, mais ce ne sont que des clichés dans le noir. Toute quantité de recherche sur Google ne produit aucun résultat.

Est-ce que quelqu'un sait si c'est possible?

Mise à jour : La suggestion de Sparks ci-dessous est un pas dans la bonne direction, je crois, mais cette méthode ne semble pas fonctionner pour toutes les valeurs. Par exemple, je peux extraire le RecordID, la gravité et le canal comme indiqué, mais je ne peux pas utiliser la même méthode pour récupérer le EventID, ou surtout la description.

Voici le XML brut d'un événement:

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

J'ai essayé d'utiliser une ValueQuery pour EventData, mais elle ne renvoie aucune donnée.

Jeff Miles
la source
+1 - nous l'utilisons pour envoyer des alertes à partir de notre serveur Web, et je voudrais pour ma part plus d'informations dans l'e-mail! Je garderai un œil sur ce sujet ...
Keith Williams

Réponses:

3

J'y suis allé un peu différemment, mais cette approche génère des e-mails sur les nouveaux événements qui correspondent à un filtre personnalisé, avec tous les détails de l'événement inclus dans le corps de l'e-mail.

1) Créez une «vue personnalisée» dans l'Observateur d'événements avec le filtre souhaité.

2) Une fois que vous avez la vue, vous devriez voir un lien vers 'Attacher la tâche à cette vue personnalisée ...'.

J'ai choisi d'utiliser sendMail.exe à partir d'ici ( http://caspian.dotconf.net/menu/Software/SendEmail/ ) que j'ai extrait dans C: \ sendmail. La raison en est que l'action `` Envoyer un e-mail '' de Microsoft a des problèmes d'authentification SMTP et n'est apparemment même pas présente dans Server 2012.

Dans mon cas, j'ai donc sélectionné «Démarrer un programme» tout en attachant la tâche à la vue personnalisée. Mais nous allons le modifier en XML, alors ne vous inquiétez pas de le remplir via l'interface graphique.

3) Exportez la nouvelle tâche au format XML, nous la modifierons plus tard.

4) Créez un fichier 'mail-event.bat' sous le dossier C: \ sendmail avec les 3 lignes suivantes:

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

Évidemment, remplacez 'smtp_server', 'from', 'user', 'pass', 'to', 'subject' par les valeurs souhaitées.

Cela va créer un fichier '$ (EventRecordID) .log' sous C: \ sendmail avec tous les détails de cet événement, le poster, puis le supprimer.

Vous pouvez tester si le fichier de commandes fonctionne en allant dans l'Observateur d'événements, en ouvrant un événement dans votre journal d'applications, en basculant vers l'onglet Détails, en sélectionnant «Vue XML», puis en recherchant EventRecordID. Copiez cet entier, puis exécutez-le à partir de la ligne de commande:

C: \ sendmail> log-event.bat 53522

Bien sûr, en remplaçant 53522 par la valeur du nœud EventRecordID. Si vous recevez l'e-mail, rendez-vous chez vous.

REMARQUE: vous avez peut-être remarqué que la chaîne «Application» apparaît plusieurs fois dans la ligne de commande pour wevtutil.exe - c'est parce que je n'arrivais pas à le faire fonctionner en le pointant directement sur la vue personnalisée, et mon La vue personnalisée se trouvait être un sous-ensemble d'événements qui se trouvent tous dans le journal des applications. Vous devrez peut-être ajuster cela pour que cela fonctionne dans votre cas si vous essayez d'envoyer des événements à partir du journal système, par exemple.

5) Modifiez le XML que vous avez exporté, nous allons faire deux changements:

Tout d'abord, ajoutez le nœud «ValueQueries» suivant dans le XML sous le nœud «EventTrigger»:

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

REMARQUE: Dans ce qui précède, j'ai coupé les informations «Abonnement» qui auront été remplies en fonction de la vue personnalisée que vous avez créée. Ne copiez pas mon «abonnement» dans votre XML!

Ensuite, remplacez le nœud Actions par ce qui suit:

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

Maintenant, faites apparaître un nouvel événement dans votre vue personnalisée et vous devriez recevoir automatiquement la notification par e-mail! Woohoo!

JeremyS
la source
1

En utilisant la documentation du lien fourni par Sparks, ajoutez cette ligne supplémentaire au XML exporté depuis le Planificateur de tâches pour obtenir le texte de votre événement:

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

Également intéressant (et, espérons-le, explicite):

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

J'ai trouvé ce googling "Event / System / EventRecordID"

Vous pouvez ensuite référencer les variables $ (eventData) et $ (eventTimeCreated) dans votre tâche.

Il semble que les valeurs soient spécifiées en parcourant la hiérarchie XML. Je m'attendrais à ce que vous puissiez spécifier la plupart des parties de l'événement en décomposant le vidage XML brut pour créer une expression délimitée par une barre oblique.

Il semble que '/ @' soit un raccourci pour un caractère espace dans cette syntaxe.


la source
Je viens de l'ajouter à mes événements, nous verrons si cela fonctionne la prochaine fois qu'il y aura un conflit DFSR. Merci pour la réponse, je vous tiendrai au courant.
Jeff Miles
1

Êtes-vous après les données de l'événement?

Mon exigence était d'envoyer un e-mail chaque fois qu'un pool d'applications IIS s'arrêtait en raison d'un délai d'inactivité. Je voulais que le nom du pool d'applications qui était fermé apparaisse dans l'e-mail.

Cela a fonctionné pour moi:

<Value name = "appPoolId"> Event / EventData / Data [@ Name = 'AppPoolID'] </Value>


la source
1

Je n'ai jamais réussi à faire fonctionner cela, et il semble que pour Server 2012, cette fonctionnalité de messagerie ait été complètement supprimée. Une impasse malheureusement.

Jeff Miles
la source
0

Je suppose que j'ai fini de développer tes idées

<?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>[email protected]</To>
      <From>[email protected]</From>
      <Body>$(EventData)
$(Message)</Body>
      <HeaderFields />
      <Attachments />
    </SendEmail>
  </Actions>
</Task>
Tim Tsyganko
la source
S'il vous plaît, ne laissez pas simplement tomber un vidage de code (sur une question de trois ans), mais expliquez ce que vous avez fait.
Sven