Event log con LogParser e WMI

di Christian Paparelli, in Admin,
  • 0
  • 0
  • 0
  • 809 byte

L'idea di questo lab è nata da una reale esigenza di avere in un file di testo giornaliero i vari log del registro degli eventi (Event Viewer).

Le strade possibili sono due, creare uno script usando WMI oppure usare Logparser

Prima strada: WMI

Le informazioni verranno estratte richiamando la classe Win32_NTLogEvent, pertanto possiamo usare il seguente codice

Function WMIDate(dtmEventDate)<br />WMIDate = CDate(Mid(dtmEventDate, 7, 2) &amp; &quot;/&quot; &amp; Mid(dtmEventDate, 5,2) &amp; &quot;/&quot; &amp; Left(dtmEventDate, 4) &amp; &quot; &quot; &amp; Mid (dtmEventDate, 9, 2) &amp; &quot;:&quot; &amp; Mid(dtmEventDate, 11, 2) &amp; &quot;:&quot; &amp; Mid(dtmEventDate, 13, 2))<br />End Function<br /><br />strComputer = &quot;.&quot;<br />Set objWMIService = GetObject( _<br />&quot;winmgmts:\\&quot; &amp; strComputer &amp; &quot;\root\cimv2&quot;)<br />Set colItems = objWMIService.ExecQuery _<br />(&quot;Select * from Win32_NTLogEvent&quot;)<br />For Each objItem in colItems<br />Select Case objItem.EventType<br />Case 1<br />strType=&quot;Error&quot;<br />Case 2<br />strType=&quot;Warning&quot;<br />Case 3<br />strType=&quot;Information&quot;<br />Case 4<br />strType=&quot;Security audit success&quot;<br />Case 5<br />strType=&quot;Security audit failure&quot;<br />End Select<br />Wscript.Echo strType,FormatDateTime(WMIDate (objItem.TimeGenerated),0),_<br />objItem.SourceName,objItem.CategoryString,objItem.EventCode, _<br />objItem.User,objItem.ComputerName<br />Next

Questo script permette di ottenere lo stesso risultato dell'Event Viewer ma con il grande vantaggio di essere molto più flessibile e soprattutto leggero. Ha come unico neo quello di visualizzare tutti gli eventi senza suddiverderli per categoria, quindi gli eventi di Application vengono visualizzati con gli eventi di Security, ecc.

Per visualizzare solo gli eventi di una precisa categoria possiamo modificare la query WMI andando a filtrare il campo Logfile. Ad esempio con questa stringa visualizzeremo tutti gli eventi della categoria System:

(&quot;Select * from Win32_NTLogEvent where Logfile='System'&quot;)

Ovviamente questo piccolo script ci permette di automatizzare notevolmente la gestione del registro eventi, potremmo ad esempio modificare la query in modo da estrarre ogni giorno gli eventi di tipo "Error", schedulare il tutto e salvare il risultato in un file di testo.

Seconda strada: Logparser

Grazie a Logparser possiamo accedere direttamente al registro degli eventi senza doverci preoccupare di programmazione, infatti basta questa riga di codice per ottenere tutti gli eventi del registro System

C:\&gt;logparser &quot;select EventTypeName, TimeGenerated, SourceName, Strings, EventID, SID, ComputerName FROM System&quot; -resolvesids -o:csv -q:on -i:EVT

Grazie al flag -resolvesids logparser restituirà il nome dell'utente invece del SID

Digitando C:\>logparser -h -i:EVT verrà mostrato il seguente help che ci permette di visualizzare tutti i meandri del registro degli eventi

Input format: Event Log Format (EVT)Parses the Windows Event LogFrom entity: [\\<machinename />\]<eventlog /> or <evt_filename /><eventlog />can be a system's EventLog (e.g.'System', 'Application', 'Security')Parameters:<br />-fulltext <on|off />: Retrieve the full text message [default value=ON]<br />-resolvesids <on|off />: Resolve SID's into full account names [default value=OFF]<br />-formatmsg <on|off />: Format the message to be on a single line [default value=ON]<br />-ignoremsgerr <on|off />: Ignore errors while retrieving text messages [default value=OFF]<br />-fulleventcode <on|off />: Return the full event code instead of the friendly event code [default value=OFF]<br /><br />Fields:EventLog (S) RecordNumber (I) TimeGenerated (T) TimeWritten (T) EventID (I) EventType (I) EventTypeName (S) EventCategory (I)SourceName (S) Strings (S) ComputerName (S) SID (S) Message (S)

Concludendo abbiamo visto due diversi approcci per ottenere lo stesso risultato il primo forse più flessibile ma necessita di una maggior padronanza di scripting il secondo forse con un approccio più sistemistico ma altrettanto potente.

L'allegato con i due esempi è disponibile qui.

Commenti

Visualizza/aggiungi commenti

| Condividi su: Twitter, Facebook, LinkedIn

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Approfondimenti

Nessuna risorsa collegata