it-swarm-es.com

Correo electrónico del servidor 2008 sobre variables de eventos

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 está funcionando muy bien, sin embargo, sería ideal si en el cuerpo del mensaje se pudiera colocar el contenido del evento. He intentado usar $ eventdescription y% eventdescription%, pero esas son solo tomas en la oscuridad. Cualquier cantidad de búsqueda en 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 RecordID, Severity y Channel como se muestra, pero no puedo usar el mismo método para recuperar 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]

Intenté usar ValueQuery para EventData, pero no devuelve datos.

13
Jeff Miles

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

1
Jeff Miles

Hice esto de manera 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 que desee.

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 ni siquiera 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) Exporta 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 lo eliminará.

Puede probar si el archivo por lotes funciona ingresando al Visor de eventos, abriendo un evento en su registro de Aplicaciones, cambiando a la pestaña Detalles, seleccionando 'Vista XML' y luego buscando EventRecordID. Copie ese 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 se debe a que parece que no puedo hacer que funcione apuntándola 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 deba ajustar eso para que funcione en su caso si, por ejemplo, intenta enviar eventos desde el registro del sistema.

5) Edite el XML que exportó, haremos dos cambios:

Primero, agregue el siguiente nodo 'ValueQueries' en el XML bajo el 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 habrá completado según la Vista personalizada que creó. ¡No copie mi 'Suscripción' en su XML!

En segundo lugar, 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! ¡Guau!

3
JeremyS

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

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

También interesante (y con suerte se explica por sí mismo):

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

Encontré este "Event/System/EventRecordID" en Google

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

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

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

1
Kirk Patten

¿Buscas los datos del evento?

Mi requisito era enviar un correo electrónico cada vez que un IIS Application Pool se apaga 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"> Evento/EventData/Data [@ Name = 'AppPoolID'] </Value>

1
Mr Helpful

No tengo acceso a una máquina Server 2008 o Vista para probar esto yo mismo y obtener la variable para usted, pero este artículo debería ser útil.

Si crea una tarea básica y luego ve el XML de la tarea, debería ver todos los valores disponibles.

http://blogs.technet.com/otto/archive/2007/11/09/find-the-event-that-triggered-your-task.aspx

1
sclarson

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>[email protected]</To>
      <From>[email protected]</From>
      <Body>$(EventData)
$(Message)</Body>
      <HeaderFields />
      <Attachments />
    </SendEmail>
  </Actions>
</Task>
0
Tim Tsyganko