Welcome to TechNet Blogs Sign in | Join | Help
Abfrage von Eventlog-Einträgen mit PowerShell

Eine alltägliche Aufgabe für Administratoren (zumindest für diejenigen, die noch nicht mit dem System Center Operations Manager arbeiten … ;-)  ): Die Abfrage von Einträgen aus dem Eventlog. Das ist mit PowerShell ganz einfach: ‘Get-EventLog’, optional gefiltert z.B. mit ‘-LogName’. Aber wie fragt man Einträge eines bestimmten Zeitraums ab? Die Idee: Filtern mit ‘Where-Object’.

Die folgende Abfrage liefert uns eine kurze Tabelle, der wir die verfügbaren Attribute entnehmen können:

Get-EventLog –LogName System –Newest 10

image

Demnach könnten wir nach ‘Time’ filtern. Also z.B. für alle Einträge vom August:

Get-EventLog –LogName System | Where-Object {$_.Time –eq “Aug*”}

Damit bekommen wir jedoch keinerlei Ergebnis. Ok, erster Fehler: es muß ‘-like’ heißen, nicht ‘-eq’. Sonst bekommen wir nur genaue Übereinstimmungen, und ‘*’ wird nicht als Wildcard interprätiert. Also:

Get-EventLog –LogName System | Where-Object {$_.Time –like “Aug*”}

Nope. Immer noch nichts. Die Lösung bringt ein genauerer Blick auf die Attribute, z.B. mit:

Get-EventLog –LogName System –Newest 1 | fl

image

Es stellt sich heraus, daß die Spalte ‘Time’ in der Tabelle eine formatierte Anzeige des eigentlichen Attributs ‘Time Generated’ ist. Also nächster Versuch, immer noch für Einträge vom August:

Get-EventLog –LogName System | Where-Object {$_.TimeGenerated –like “*.08.*”}

Nope! Denn: die Anzeige des Datums mit ‘fl’ ist ebenfalls formatiert, und zwar entsprechend der Regionalen Einstellungen in der Systemsteuerung. Das PowerShell-Objekt speichert das Datum im US-Format ‘mm/dd/yyyy’, also z.B. ‘08/12/2009’.

Damit bekommen wir folgende Abfrage, die nun auch das gewünschte Ergebnis bringt:

Get-EventLog –LogName System | Where-Object {$_.TimeGenerated –like “08*”}

Mit freundlichen Grüßen!

 

Ralf M. Schnell

Posted: Wednesday, August 12, 2009 11:10 AM by Ralf M. Schnell
Filed under: ,

Comments

TrackBack said:

# August 13, 2009 6:47 AM

Ralf Reck said:

Bei mir unter Windows XP Prof. 32 Bit Deutsch SP3 (PowerShell v1) funktioniert das nicht so ganz. Mit dem letzten Befehl werden alle Ereignisse vom "Aug 08" angezeigt (also 8. August?). Es sollten aber doch alle "Aug" ausgegeben werden oder?

Mit

Get-EventLog –LogName System | Where-Object {$_.TimeGenerated –like “04*”}

bekomme ich dann alle vom "Aug 04" angezeigt.

# August 14, 2009 3:37 AM

Markus said:

Hallo bei mir erscheinen in diesem Fall nur Einträge vom Jul 08!

Index Time          Type Source                EventID Message

----- ----          ---- ------                ------- -------

40351 Jul 08 19:18  Info Service Control M...     7036 Dienst "Sitzungs-Manager f³r Remotedeskto...

40350 Jul 08 19:11  Info Service Control M...     7035 Der Steuerbefehl "beenden" wurde erfolgre...

40349 Jul 08 19:11  Info Service Control M...     7036 Dienst "GFTDeblockService" befindet sich ...

40348 Jul 08 19:10  Info Service Control M...     7035 Der Steuerbefehl "starten" wurde erfolgre...

# August 17, 2009 4:47 AM

Ralf M. Schnell said:

Hallo zusammen!

Nun, dann gibt es hier offensichtlich noch eine Abhängigkeit, die ich nicht berücksichtigt hatte. Ich vermute: zur PowerShell-Version bzw. zum installierten Betriebssystem. Ich habe ein deutsches Windows 7-System mit entsprechenden Regionalen Einstellungen und Powershell v2 zum Testen benutzt. Insbesondere bei der Implementierung der unterschiedlichen Sprachversionen gibt es signifikante Unterschiede zwischen Windows XP und Windows Vista bzw. Windows 7. Ob nun die Formatierung des Datums mit PowerShell v1 oder mit Windows XP zusammenhängt, kann ich nicht sagen - dazu muß ich erstmal einige Testsysteme aufsetzen.

Mit freundlichen Grüßen!

Ralf M. Schnell

# August 18, 2009 2:56 AM

MikeH said:

Hallo Herr Schnell!

Das hat nichts mit dem installierten System zu tun sondern mit der falschen Abfragesyntax.

Da ja alles Objekte sind wäre die korrekte Abfrage für August:

Get-EventLog -LogName System | Where-Object {$_.TimeGenerated.Month -eq 8}

Problem dabei ist allerdings, dass man dann auch August 2008, 2007 usw. angezeigt bekommt, also sollte man die Abfrage gegebenfalls noch um das Jahr ergänzen.

Man ergänzt also noch -and $_.TimeGenerated.Year -eq 2009

# November 25, 2009 3:07 PM
Leave a Comment

(required) 

(required) 

(optional)

(required) 

  
Enter Code Here: Required

Comment Notification

If you would like to receive an email when updates are made to this post, please register here

Subscribe to this post's comments using RSS

Page view tracker