E-mail do servidor 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 cenas no escuro. Qualquer quantidade de googling 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, mas esse método não parece funcionar para todos os valores. Por exemplo, 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 nenhum dado.

    
por Jeff Miles 06.05.2009 / 22:27

6 respostas

1

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

    
por 01.11.2012 / 17:23
3

Fiz isso de maneira um pouco diferente, mas essa abordagem gera e-mails em novos eventos que correspondem a um filtro personalizado, com todos os detalhes do evento incluídos no corpo do e-mail.

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

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

Eu escolhi usar sendMail.exe daqui ( link ) que eu extraí para C: \ sendmail . O motivo é que a ação 'Enviar um e-mail' da Microsoft tem problemas com a autenticação SMTP e, aparentemente, nem está presente no Server 2012.

Então, no meu caso, selecionei "Iniciar um programa" ao anexar a tarefa à Visualização personalizada. Mas vamos editá-lo como XML, então não se preocupe em preenchê-lo através da GUI.

3) Exporte a nova Tarefa para XML, editaremos depois.

4) Crie um arquivo 'mail-event.bat' na pasta C: \ sendmail com as seguintes 3 linhas:

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', 'from', 'user', 'pass', 'to', 'subject' pelos valores desejados.

Isso criará um arquivo '$ (EventRecordID) .log' em C: \ sendmail com todos os detalhes do evento, enviá-lo por e-mail e excluí-lo.

Você pode testar se o arquivo em lotes funciona indo para o Visualizador de Eventos, abrindo um evento no log de Aplicativos, alternando para a guia Detalhes, selecionando 'Visualização XML' e, em seguida, procurando EventRecordID. Copie esse inteiro e, em seguida, execute a partir da linha de comando:

C: \ sendmail > log-event.bat 53522

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

OBSERVE: Você deve ter notado que a string 'Aplicativo' aparece algumas vezes na linha de comando do wevtutil.exe - isso porque eu não consegui fazê-lo funcionar apontando diretamente para a Visualização Personalizada e minha visualização personalizada era um subconjunto de eventos que estão todos dentro do log do aplicativo. Talvez seja necessário ajustar isso para que funcione no seu caso, se você tentar enviar eventos por email do log do sistema, por exemplo.

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

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

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

OBSERVAÇÃO: No acima, eu cortei as informações de 'Assinatura' que foram preenchidas com base na Visualização Personalizada que você criou. Não copie meu 'Subscription' no seu XML!

Em segundo lugar, substitua o nó Ações pelo seguinte:

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

Agora, crie um novo evento na sua Visualização personalizada e você receberá a notificação por e-mail automaticamente. Woohoo!

    
por 21.06.2013 / 08:48
1

Não tenho acesso a uma máquina com o Server 2008 ou o Vista para experimentar isso e obter a variável para você, mas este artigo deve ser útil.

Se você criar uma tarefa básica e, em seguida, visualizar o XML da tarefa, deverá ver todos os valores disponíveis.

link

    
por 13.05.2009 / 22:48
1

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

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

Também interessante (e esperançosamente autoexplicativo):

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

Encontrei este "Evento / Sistema / EventRecordID" no Google

Você pode referenciar as variáveis $ (eventData) e $ (eventTimeCreated) em sua tarefa.

Parece que os valores são especificados percorrendo a hierarquia XML. Espero que você seja capaz de especificar a maioria das partes do evento decompondo o despejo XML bruto para criar uma expressão delimitada por barras.

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

    
por 03.11.2009 / 22:13
1

Você está após os dados do evento?

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

Isso funcionou para mim:

< Nome do valor="appPoolId" > Evento / EventData / Dados [@ Name = 'AppPoolID'] < / Valor >

    
por 06.05.2010 / 18:08
0

Acho que terminei de desenvolver suas ideias

<?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>
    
por 21.02.2013 / 17:35