it-swarm-pt.tech

E-mail do Server 2008 sobre variáveis ​​de evento

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 é o envio de um e-mail por meio de um servidor SMTP.

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

Alguém sabe se isso é possível?

Atualizar: A sugestão do Sparks abaixo é um passo na direção certa, eu acredito, entretanto esse método não parece funcionar para todos os valores. Por exemplo, posso obter o RecordID, Severity e Channel conforme mostrado, mas não posso usar o mesmo método para recuperar o EventID ou, o 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]

Tentei usar um ValueQuery para EventData, mas ele não retorna nenhum dado.

13
Jeff Miles

Eu nunca fiz isso funcionar e parece que no Server 2012 essa funcionalidade de e-mail foi removida completamente. Um beco sem saída, infelizmente.

1
Jeff Miles

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) Assim que tiver a visualização, você verá um link para 'Anexar tarefa a esta visualização personalizada ...'.

Eu escolhi usar sendMail.exe daqui ( http://caspian.dotconf.net/menu/Software/SendEmail/ ) que extraí para C:\sendmail. O motivo é que a ação 'Enviar um e-mail' 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' ao anexar a tarefa à Visualização Personalizada. Mas vamos editá-lo como XML, então não se preocupe em preenchê-lo por meio da GUI.

3) Exporte a nova tarefa para XML, iremos editá-la mais tarde.

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 desse evento, enviará por e-mail e, em seguida, o excluirá.

Você pode testar se o arquivo em lote funciona acessando o Visualizador de eventos, abrindo um evento em seu log de aplicativos, alternando para a guia Detalhes, selecionando 'Visualização XML' e, em seguida, procurando por EventRecordID. Copie esse número inteiro e execute a partir da linha de comando:

C:\sendmail> log-event.bat 53522

Claro, substituindo 53522 pelo valor do nó EventRecordID. Se você receber o e-mail, vá para o seu feliz lugar.

OBSERVAÇÃO BEM: você deve ter notado que a string 'Aplicativo' aparece algumas vezes na linha de comando para wevtutil.exe - isso porque eu não consegui fazê-lo funcionar apontando-o diretamente para a Visualização Personalizada, e meu A Visualização personalizada é um subconjunto de eventos que estão todos dentro do log do aplicativo. Você pode ter que ajustar isso para que funcione no seu caso, se 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' ao XML sob o nó 'EventTrigger':

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

NOTA: Acima, eu cortei 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!

Em segundo lugar, 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 em sua Visualização Personalizada e você receberá automaticamente a notificação por e-mail! Uau!

3
JeremyS

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 evento:

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

Também interessante (e, espero, autoexplicativo):

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

Encontrei este Googling "Event/System/EventRecordID"

Você pode então 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ê pudesse especificar quase todas as partes do evento, decompondo o despejo XML bruto para criar uma expressão delimitada por barra.

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

1
Kirk Patten

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

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

Isso funcionou para mim:

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

1
Mr Helpful

Não tenho acesso a uma máquina Server 2008 ou Vista para tentar this eu mesmo 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.

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

1
sclarson

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>
0
Tim Tsyganko