Korrekte Powershell Abfrage von Eventlog Einträgen nach Datum


Inspiriert durch einen Vortrag von Dr. Tobias Weltner auf einer Microsoft Veranstaltung in Karlsruhe, hatte ich die Gelegenheit mir die neuen Möglichkeiten des Remoting in Powershell 2.0 anzusehen.

Als ich nun meine ersten Gehversuche in Powershell machte, brauchte ich Spieldaten. Da bietet sich natürlich die Eventlog an.

Als erstes wurde

Get-Eventlog System

ausgeführt. Dieser Befehl listet nun alle Eventlog Einträge auf. Das kann dann schon mal dauern…

Schnell war klar da muss ein Filter her. Also mal kurz gegooglet:

http://www.google.de/search?q=powershell+get-eventlog+filter

Zu Tage kam Ralf Schnells Blogeintrag: http://blogs.technet.com/ralfschnell/archive/2009/08/12/abfrage-von-eventlog-eintr-gen-mit-powershell.aspx

Dort war die Rede vom where-Object mit Bedingung.

Da hab ich dann gleich mal gelernt, dass man sich nicht auf die Spaltenüberschriften verlassen kann, denn die werden einfach gekürzt! So ist z. B. bei Aufruf von

Get-EventLog System –Newest 1

bei der Zeitausgabe als Überschrift Time zu lesen. Aber man kann mit Time nachher nichts anfangen, denn es steckt eigentlich TimeGenerated dahinter.

<KleineSpitze>
So weit so gut, aber das was Herr Schnell nun versucht und in einem Kommentar auf Powershell V1 bzw. V2 oder XP, Vista oder Windows 7 Unzulänglichkeiten zu schieben versucht, hätte ich von vielen erwartet aber nicht von einem Microsoft Mitarbeiter der MCP, MCSE, MCSA, MCT und ITIL Service Manager zertifiziert ist. So macht man seine eigenen Produkte schlecht!
</KleineSpitze>

Um nun also die Daten korrekt verarbeiten zu können muss man also den Typ von TimeGenerated rausfinden. Diesen bekommt man schön durch

Get-EventLog System –newest 1 | Get-Member

aufgelistet. Falls es mal zuviele werden sollten, kann man gezielt nach einem suchen:

Get-EventLog System –newest 1 | Get-Member | Where-Object {$_.Name –like "time*"}

Dort ist nun bei Definition die Rede von System.DateTime. Da Powershell auf dem .Net-Framework aufsetzt und alles ja Objekte sind, hat man von da ausgehend alle Möglichkeiten: http://msdn.microsoft.com/en-us/library/system.datetime.aspx

Man kann nun also durch

Get-EventLog System | Where-Object {$_.TimeGenerated.Month –eq 11 –and $_.TimeGenerated.Year –eq 2009}

alle Eventlog-Einträge aus dem November 2009 anzeigen lassen.

2 Antworten to “Korrekte Powershell Abfrage von Eventlog Einträgen nach Datum”

  1. Ereignisanzeige Query Builder für Powershell « Das nie endende Chaos! Says:

    […] in der Ereignisanzeige unterwegs ist und nur bestimmte Ereignisse braucht wie z. B. nach Datum: https://newyear2006.wordpress.com/2009/11/26/korrekte-powershell-abfrage-von-eventlog-eintrgen-nach-d…, der wird sich freuen, das es eine komfortable Möglichkeit gibt, einen Filter für bestimmte […]

  2. Quirel Says:

    Eine weitere Variante Abfragen auf bestimmte Daten zu beschränken ist die Möglichkeit

    where {(Get-Date $_.TimeCreated -format d) -eq (Get-Date 13.10.2012 -format d)}

    Entscheidend ist die Angabe eines vergleichbaren Formats!

Schreibe einen Kommentar

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s


%d Bloggern gefällt das: