Email do Server 2008 em Variáveis ​​de Evento

13

Um dos novos recursos do Server 2008 é a capacidade de anexar uma tarefa a um evento específico nos logs de eventos. Uma das ações disponíveis é enviar um email por meio de um servidor SMTP.

Isso está funcionando muito bem, no entanto, seria ideal se, no corpo da mensagem, o conteúdo do evento pudesse ser colocado. Eu tentei usar $ eventdescription e% eventdescription%, mas essas são apenas fotos no escuro. Qualquer quantidade de pesquisa no Google não produz resultados.

Alguém sabe se isso é possível?

Atualização : A sugestão de Sparks abaixo é um passo na direção certa, acredito, no entanto, esse método não parece funcionar para todos os valores. Por exemplo, eu posso extrair o RecordID, Severity e Channel como mostrado, mas não posso usar o mesmo método para recuperar o EventID ou, mais importante, a descrição.

Aqui está o XML bruto de um 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]

Eu tentei usar um ValueQuery para EventData, mas ele não retorna dados.

Jeff Miles
fonte
+1 - usamos isso para enviar alertas de nosso servidor da Web, e eu gostaria de obter mais informações no e-mail! Eu vou manter um olho sobre esta discussão ...
Keith Williams

Respostas:

3

Fiz isso de maneira um pouco diferente, mas essa abordagem gera emails sobre novos eventos que correspondem a um filtro personalizado, com todos os detalhes do evento incluídos no corpo do email.

1) Crie uma 'Visualização personalizada' no Visualizador de Eventos com o filtro desejado.

2) Depois de ter a visualização, você verá um link para 'Anexar tarefa a esta visualização personalizada ...'.

Eu escolhi usar o sendMail.exe a partir daqui ( http://caspian.dotconf.net/menu/Software/SendEmail/ ) que extraí para C: \ sendmail. O motivo é que a ação 'Enviar um email' da Microsoft tem problemas com a autenticação SMTP e também aparentemente nem está presente no Server 2012.

Portanto, no meu caso, selecionei 'Iniciar um programa' enquanto anexava a tarefa à Visualização Personalizada. Mas vamos editá-lo como XML, portanto, não se preocupe em preenchê-lo através da GUI.

3) Exporte a nova tarefa para XML, nós a editaremos mais tarde.

4) Crie um arquivo 'mail-event.bat' na pasta C: \ sendmail com as três linhas a seguir:

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, substitua 'smtp_server', 'de', 'user', 'pass', 'para', 'subject' pelos valores desejados.

Isso criará um arquivo '$ (EventRecordID) .log' em C: \ sendmail com todos os detalhes desse evento, envie-o por correio e exclua-o.

Você pode testar se o arquivo em lotes funciona acessando o Event Viewer, abrindo um evento no log de Aplicativos, alternando para a guia Detalhes, selecionando 'XML View' e procurando EventRecordID. Copie esse número inteiro e execute a partir da linha de comando:

C: \ sendmail> log-event.bat 53522

Obviamente, substituindo 53522 pelo valor do nó EventRecordID. Se você receber o email, vá para o seu lugar feliz.

NOTA BEM: Você deve ter notado que a string 'Aplicativo' aparece algumas vezes na linha de comando do wevtutil.exe - é porque eu não conseguia fazê-lo funcionar apontando-a diretamente para o Modo de Exibição Personalizado. A exibição personalizada passou a ser um subconjunto de eventos que estão todos dentro do log do aplicativo. Pode ser necessário ajustar isso para que funcione no seu caso, se você estiver tentando enviar eventos do log do sistema, por exemplo.

5) Edite o XML que você exportou, faremos duas alterações:

Primeiro, adicione o seguinte nó 'ValueQueries' no XML no nó 'EventTrigger':

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

NOTA: No exemplo acima, recortei as informações de 'Assinatura' que foram preenchidas com base na Visualização personalizada que você criou. Não copie minha 'Assinatura' em seu XML!

Segundo, substitua o nó Actions pelo seguinte:

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

Agora, faça com que um novo evento apareça na sua Visualização personalizada e você receberá automaticamente a notificação por email! Woohoo!

JeremyS
fonte
1

Usando a documentação no link fornecido pelo Sparks, adicione esta linha adicional ao XML exportado do Agendador de Tarefas para obter o texto do seu evento:

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

Também interessante (e espero que seja auto-explicativo):

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

Encontrei este Google "Event / System / EventRecordID"

Você pode fazer referência às variáveis ​​$ (eventData) e $ (eventTimeCreated) em sua tarefa.

Parece que os valores são especificados percorrendo a hierarquia XML. Eu esperaria que você fosse capaz de especificar quase todas as partes do evento decompondo o dump XML bruto para criar uma expressão delimitada por barra.

Parece que '/ @' é uma abreviação de um caractere de espaço nesta sintaxe.


fonte
Acabei de adicionar isso aos meus eventos e veremos se funciona da próxima vez que houver um conflito no DFSR. Obrigado pela resposta, eu vou mantê-lo informado.
Jeff Miles
1

Você está atrás dos dados do evento?

Meu requisito era enviar um email sempre que um pool de aplicativos IIS fosse desligado devido a um tempo limite inativo. Eu queria que o nome do pool de aplicativos que estava sendo desligado aparecesse na mensagem de email.

Isso funcionou para mim:

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


fonte
1

Eu nunca acabei fazendo isso funcionar e, para o Server 2012, essa funcionalidade de email foi removida completamente. Um beco sem saída, infelizmente.

Jeff Miles
fonte
0

Acho que terminei de desenvolver suas idéias

<?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
fonte
Por favor, não deixe cair um despejo de código (em uma pergunta de três anos), mas explique o que você fez.
Sven