2010-03-17 15 views
10
  1. Come sapere se un determinato evento (dato ID evento, ora e nodo come input) viene registrato o meno? [In questo caso, io so solo evento verrà registrato]
  2. Se l'evento viene registrato, come faccio a ottenere dettagli come descrizione di un evento, Log-name ecc ..

per esempio, voglio eseguire una query per un evento sotto il nodo Registri applicazioni e servizi> Microsoft> Windows> groupPolicy> Operativo e l'ID evento è 5315 e l'ora è l'ora corrente.C#: Come interrogare i dettagli di un registro eventi con un determinato ID evento?

risposta

17

Ci sono alcuni nuovi colpi di scena se si va a interrogare eventi dal nuovo stile EventLog di Windows.

  1. È necessario utilizzare le classi dallo spazio dei nomi System.Diagnostics.Eventing.Reader per leggere i nuovi eventi.
  2. La query sarà in formato Xpath, in modo che la temporizzazione sia complessa, vedere msdn per EventLogQuery definition.
  3. Il programma verrà eseguito in problemi di accesso, essere pronti a impersonare un utente che è incluso nel gruppo di annunci EventReaders sulla macchina di registrazione.

Questo esempio mostra alcuni dei nuovi metodi di accesso, applausi.

 string eventID = "5312"; 
     string LogSource = "Microsoft-Windows-GroupPolicy/Operational"; 
     string sQuery = "*[System/EventID=" + eventID + "]"; 

     var elQuery = new EventLogQuery(LogSource, PathType.LogName, sQuery); 
     var elReader = new System.Diagnostics.Eventing.Reader.EventLogReader(elQuery); 

     List<EventRecord> eventList = new List<EventRecord>(); 
     for (EventRecord eventInstance = elReader.ReadEvent(); 
      null != eventInstance; eventInstance = elReader.ReadEvent()) 
     { 
      //Access event properties here: 
      //eventInstance.LogName; 
      //eventInstance.ProviderName; 
      eventList.Add(eventInstance); 
     } 
+1

Grazie Kellie .. Ha aiutato – satya

+0

come ottenere evento con date date? query = "* [Sistema [" + "(Provider/@ Nome = \" Microsoft Office 15 Alerts \ ") e" + // "(EventID = 300) e" + "(TimeCreated/@ SystemTime > = \ "" + t1 + "\") e "+ " (TimeCreated/@ SystemTime < = \ "" + t2 + "\") "+ "]] "; Sto ottenendo un'eccezione di query –

9

Si potrebbe interrogare il registro degli eventi in questione:

var sourceName = "MySource"; 
var el = new EventLog("Application"); 
var latestEntryTime = (from entry in el.Entries.Cast<EventLogEntry>() 
         where entry.Source == sourceName 
         && // put other where clauses here... 
         orderby entry.TimeWritten descending 
         select entry).First(); 

Tuttavia, sappiate che questo approccio è lento , dal momento che la raccolta Entries tende ad essere abbastanza grande.

Problemi correlati