Email del server 2008 sulle variabili degli eventi


13

Una delle nuove funzionalità di Server 2008 è la possibilità di associare un'attività a un evento specifico nei registri eventi. Una delle azioni disponibili è l'invio di un'e-mail tramite un server SMTP.

Funziona alla grande, tuttavia sarebbe l'ideale se nel corpo del messaggio, il contenuto dell'evento potesse essere inserito. Ho provato a usare $ eventdescription e% eventdescription%, ma questi sono solo scatti al buio. Qualsiasi quantità di googling non produce risultati.

Qualcuno sa se questo è possibile?

Aggiornamento : il suggerimento di Sparks di seguito è un passo nella giusta direzione credo, tuttavia quel metodo non sembra funzionare per tutti i valori. Ad esempio, posso estrarre RecordID, Severity e Channel come mostrato, ma non posso usare lo stesso metodo per recuperare EventID o, soprattutto, la descrizione.

Ecco l'XML grezzo di 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]

Ho provato a utilizzare ValueQuery per EventData, ma non restituisce dati.


+1: lo utilizziamo per inviare avvisi dal nostro server Web e io per primo vorrei maggiori informazioni nell'email! Terrò d'occhio questo thread ...
Keith Williams,

Risposte:


3

L'ho fatto in modo leggermente diverso, ma questo approccio genera e-mail su nuovi eventi che corrispondono a un filtro personalizzato, con tutti i dettagli dell'evento inclusi nel corpo dell'email.

1) Crea una "Visualizzazione personalizzata" nel Visualizzatore eventi con il filtro desiderato.

2) Una volta che hai la vista, dovresti vedere un collegamento a "Allega attività a questa vista personalizzata ...".

Ho scelto di utilizzare sendMail.exe da qui ( http://caspian.dotconf.net/menu/Software/SendEmail/ ) che ho estratto in C: \ sendmail. Il motivo è che l'azione "Invia un'e-mail" di Microsoft ha problemi con l'autenticazione SMTP e apparentemente non è nemmeno presente in Server 2012.

Quindi nel mio caso ho selezionato 'Avvia un programma' mentre allego l'attività alla vista personalizzata. Ma lo modificheremo come XML, quindi non preoccuparti di compilarlo tramite la GUI.

3) Esporta la nuova attività in XML, la modificheremo in seguito.

4) Crea un file 'mail-event.bat' nella cartella C: \ sendmail con le seguenti 3 righe:

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

Ovviamente, sostituisci "smtp_server", "da", "utente", "passa", "a", "soggetto" con i valori desiderati.

Questo creerà un file '$ (EventRecordID) .log' in C: \ sendmail con tutti i dettagli per quell'evento, spediscilo e poi cancellalo.

Puoi verificare se il file batch funziona accedendo al Visualizzatore eventi, aprendo un evento nel registro Applicazioni, passando alla scheda Dettagli, selezionando "Vista XML" e quindi cercando EventRecordID. Copia quel numero intero, quindi eseguilo dalla riga di comando:

C: \ sendmail> log-event.bat 53522

Ovviamente, sostituendo 53522 con il valore dal nodo EventRecordID. Se ricevi l'e-mail, vai nel tuo luogo felice.

NOTA BENE: potresti aver notato che la stringa 'Applicazione' appare un paio di volte nella riga di comando per wevtutil.exe - questo perché non riesco a farlo funzionare indicandolo direttamente nella vista personalizzata, e il mio La visualizzazione personalizzata è stata un sottoinsieme di eventi che si trovano tutti nel registro dell'applicazione. Ad esempio, potresti doverlo modificare per farlo funzionare nel tuo caso, ad esempio se stai provando a inviare eventi dal registro di sistema.

5) Modifica l'XML che hai esportato, faremo due modifiche:

Innanzitutto, aggiungi il seguente nodo "ValueQueries" nell'XML nel nodo "EventTrigger":

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

NOTA: in quanto sopra, ho inserito le informazioni "Abbonamento" che saranno state compilate in base alla vista personalizzata che hai creato. Non copiare il mio 'Abbonamento' nel tuo XML!

In secondo luogo, sostituire il nodo Azioni con il seguente:

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

Ora, fai apparire un nuovo evento nella tua vista personalizzata e dovresti ricevere automaticamente la notifica via email! Woohoo!



1

Utilizzando la documentazione nel collegamento fornito da Sparks, aggiungi questa riga aggiuntiva all'XML esportato dall'Utilità di pianificazione per ottenere il testo del tuo evento:

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

Interessante anche (e si spera si spieghi da sé):

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

Ho trovato questo Google "Event / System / EventRecordID"

È quindi possibile fare riferimento alle variabili $ (eventData) e $ (eventTimeCreated) nella propria attività.

Sembra che i valori vengano specificati passando attraverso la gerarchia XML. Mi aspetterei che tu sia in grado di specificare quasi tutte le parti dell'evento decomponendo il dump XML non elaborato per creare un'espressione delimitata da barra.

Sembra che '/ @' sia una scorciatoia per un carattere spaziale in questa sintassi.


Appena aggiunto questo ai miei eventi, vedremo se funziona la prossima volta che c'è un conflitto DFSR. Grazie per la risposta, ti terrò aggiornato.
Jeff Miles,

1

Stai cercando i dati dell'evento?

Il mio requisito era di inviare un'e-mail ogni volta che un pool di applicazioni IIS veniva chiuso a causa del timeout di inattività. Volevo che il nome del pool di app che veniva chiuso fosse visualizzato nel messaggio di posta elettronica.

Questo ha funzionato per me:

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


1

Non ho mai finito per farlo funzionare, e sembra che per Server 2012 questa funzionalità di posta elettronica sia stata completamente rimossa. Un vicolo cieco purtroppo.


0

Immagino di aver finito di sviluppare le tue idee

<?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>admin@nowhere.com</To>
      <From>reporter@nowhere.com</From>
      <Body>$(EventData)
$(Message)</Body>
      <HeaderFields />
      <Attachments />
    </SendEmail>
  </Actions>
</Task>

Per favore, non rilasciare solo un dump di codice (su una domanda di tre anni), ma spiega cosa hai fatto.
Sven
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.