Como obter informações de log de eventos em um email de tarefa agendada?

2

Eu tenho uma tarefa agendada que envia um email quando algo acontece em um aplicativo. Agora quero enviar os detalhes da mensagem do evento também no email. Como fazer isso?

No Windows Server 2008 R2 com o Agendador de Tarefas.

    
por marko 29.09.2011 / 13:15

2 respostas

4

A única maneira de conseguir isso é um pouco de solução (na minha opinião). Você precisará criar duas ações para sua tarefa. As etapas são as seguintes:

  1. O evento é acionado
  2. A primeira ação executa uma consulta para os detalhes do evento de seu interesse e os salva em um arquivo.
  3. A segunda ação anexa os detalhes do evento salvos na Etapa 2 a um e-mail e os envia.

O processo está detalhado aqui: link

    
por 29.09.2011 / 16:45
3

Essa não é a única maneira de conseguir isso. Há realmente uma maneira muito melhor que funciona no Windows Server 2008, no mínimo:

link

Para resumir, você precisa exportar a definição de tarefa para xml, adicionar algumas consultas de xpath aos dados que deseja em um editor de texto, atualizar sua linha de comando e depois importar sua definição de tarefa atualizada para o agendador de tarefas.

Uma vez exportado, abra o arquivo xml e encontre o < EventTrigger > nó.

Crie o nó filho < ValueQueries >

<ValueQueries>
    <Value name="EventID">Event/System/EventRecordID</Value>
    <Value name="Channel">Event/System/Channel</Value>
</ValueQueries>

Você pode referenciar esses dados de consulta de valor em sua linha de comando com $ (EventID) e $ (Channel). Do meu teste, os eventos de email não substituem esses valores corretamente. Em vez disso, você precisa executar uma linha de comando. É claro que você pode adicionar consultas xpath a quaisquer dados no evento, e estes são apenas exemplos.

Você também pode enfrentar alguns desafios ao passar certos dados dessas consultas de dados para uma linha de comando (vários caracteres, incluindo aspas, barras, etc ... podem entrar em conflito com os caracteres especiais em seu interpretador de comandos). Para atenuar isso, usei os dois parâmetros definidos acima e, em seguida, recuperei os dados restantes do evento usando wevtutil:

wevtutil qe "$(Channel)" /q:"*[System[(EventREcordID=$(EventID)]]" /f:xml

você pode fazer o que quiser com o texto xml completo do registro de evento que gerou o alerta (como enviar um email, analisar o xml, etc ...)

por exemplo, você pode definir a seguinte ação em sua tarefa para gravar o evento xml em disco:

<Exec>
    <Command>powershell.exe</Command>
    <Arguments>start-transcript -path C:\alertlog.log -append; add-content -path C:\output.txt -value (wevtutil qe "$(Channel)" /q:"*[System[(EventRecordID=$(EventID))]]" /f:xml); stop-transcript;</Arguments>
</Exec>

A postagem do blog referenciada entra em maiores detalhes.

    
por 01.09.2012 / 20:21