Correo electrónico de Server 2008 en variables de evento


13

Una de las nuevas características de Server 2008 es la capacidad de adjuntar una tarea a un evento específico en los registros de eventos. Una de las acciones disponibles es enviar un correo electrónico a través de un servidor SMTP.

Esto funciona muy bien, sin embargo, sería ideal si en el cuerpo del mensaje se pudieran ubicar los contenidos del Evento. He intentado usar $ eventdescription y% eventdescription%, pero esas son solo tomas en la oscuridad. Cualquier cantidad de google no produce resultados.

¿Alguien sabe si esto es posible?

Actualización : la sugerencia de Sparks a continuación es un paso en la dirección correcta, creo, sin embargo, ese método no parece funcionar para todos los valores. Por ejemplo, puedo extraer el RecordID, la gravedad y el canal como se muestra, pero no puedo usar el mismo método para recuperar el EventID, o lo más importante, la descripción.

Aquí está el XML sin procesar de un evento:

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

He intentado usar un ValueQuery para EventData, pero no devuelve datos.


+1: ¡lo usamos para enviar alertas desde nuestro servidor web y, por mi parte, me gustaría recibir más información en el correo electrónico! Seguiré este hilo ...
Keith Williams

Respuestas:


3

Lo hice un poco diferente, pero este enfoque genera correos electrónicos sobre nuevos eventos que coinciden con un filtro personalizado, con todos los detalles del evento incluidos en el cuerpo del correo electrónico.

1) Cree una 'Vista personalizada' en el Visor de eventos con el filtro deseado.

2) Una vez que tenga la vista, debería ver un enlace a 'Adjuntar tarea a esta vista personalizada ...'.

Elegí usar sendMail.exe desde aquí ( http://caspian.dotconf.net/menu/Software/SendEmail/ ) que extraje a C: \ sendmail. La razón es que la acción 'Enviar un correo electrónico' de Microsoft tiene problemas con la autenticación SMTP y aparentemente tampoco está presente en Server 2012.

Entonces, en mi caso, seleccioné 'Iniciar un programa' mientras adjuntaba la tarea a la Vista personalizada. Pero lo vamos a editar como XML, así que no se preocupe por completarlo a través de la GUI.

3) Exporte la nueva Tarea a XML, la editaremos más tarde.

4) Cree un archivo 'mail-event.bat' en la carpeta C: \ sendmail con las siguientes 3 líneas:

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

Obviamente, reemplace 'smtp_server', 'from', 'user', 'pass', 'to', 'subject' con los valores deseados.

Esto creará un archivo '$ (EventRecordID) .log' en C: \ sendmail con todos los detalles de ese evento, envíelo por correo y luego bórrelo.

Puede probar si el archivo por lotes funciona yendo al Visor de eventos, abriendo un evento en su registro de Aplicaciones, cambiando a la pestaña Detalles, seleccionando 'Vista XML' y luego busque EventRecordID. Copie ese número entero y luego ejecútelo desde la línea de comando:

C: \ sendmail> log-event.bat 53522

Por supuesto, reemplazando 53522 con el valor del nodo EventRecordID. Si recibe el correo electrónico, vaya a su lugar feliz.

NOTA BIEN: es posible que haya notado que la cadena 'Aplicación' aparece un par de veces en la línea de comando para wevtutil.exe, eso es porque parece que no pude hacer que funcione apuntando directamente a la Vista personalizada, y mi La vista personalizada resultó ser un subconjunto de eventos que están todos dentro del registro de la aplicación. Es posible que tenga que ajustar eso para que funcione en su caso si intenta enviar eventos desde el registro del sistema, por ejemplo.

5) Edite el XML que exportó, vamos a hacer dos cambios:

Primero, agregue el siguiente nodo 'ValueQueries' al XML debajo del nodo 'EventTrigger':

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

NOTA: En lo anterior, recorté la información de 'Suscripción' que se completará en función de la Vista personalizada que creó. ¡No copie mi 'Suscripción' en su XML!

Segundo, reemplace el nodo Acciones con lo siguiente:

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

Ahora, haga que aparezca un nuevo evento en su Vista personalizada, ¡y debería recibir automáticamente la notificación por correo electrónico! Woohoo!



1

Usando la documentación en el enlace proporcionado por Sparks, agregue esta línea adicional al XML exportado desde el Programador de tareas para obtener el texto del evento:

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

También interesante (y espero que se explique por sí mismo):

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

Encontré este Google "Evento / Sistema / EventRecordID"

Luego puede hacer referencia a las variables $ (eventData) y $ (eventTimeCreated) en su tarea.

Parece que los valores se especifican al recorrer la jerarquía XML. Espero que pueda especificar la mayoría de las partes del evento descomponiendo el volcado XML sin procesar para crear una expresión delimitada por barras.

Parece que '/ @' es la abreviatura de un carácter de espacio en esta sintaxis.


Acabo de agregar esto a mis eventos, veremos si funciona la próxima vez que haya un conflicto DFSR. Gracias por la respuesta, te mantendré informado.
Jeff Miles el

1

¿Estás buscando los datos del evento?

Mi requisito era enviar un correo electrónico cada vez que se cerraba un grupo de aplicaciones IIS debido a un tiempo de inactividad. Quería que el nombre del grupo de aplicaciones que se estaba cerrando apareciera en el mensaje de correo electrónico.

Esto funcionó para mí:

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


1

Nunca terminé haciendo que esto funcionara, y parece que para Server 2012 esta funcionalidad de correo electrónico se ha eliminado por completo. Un callejón sin salida desafortunadamente.


0

Supongo que terminé de desarrollar tus ideas

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

Por favor, no solo deje caer un poco de código (en una pregunta de tres años), sino que explique lo que hizo.
Sven
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.