Langlitz – IT Consulting

…for a better IT

Langlitz – IT Consulting

Posted by blog on Mai 5th, 2012

Herzlich Willkommen auf meinem Blog

IMG_7217

Hier werden Themen behandelt, die sich rund um eMail, Exchange, Active Directory, Powershell und vieles mehr und allen damit verbundenen Höhen und Tiefen drehen.

 

Viel Spass beim Schmökern –

Kommentare sind natürlich erwünscht 🙂

Hier geht’s zur Anmeldung bzw. Registrierung

Posted in Allgemein | Comments Off on Langlitz – IT Consulting

Event Viewer durch Powershell ersetzen – Get-Eventlog / Get-WinEvent

Posted by blog@langlitz-it.de on September 23rd, 2016

Sicher haben Sie sich auch schon häufiger über den Windows Event Viewer ärgern müssen. Nicht nur, dass dieser bei großen Datenmengen extrem langsam wird, auch die Filtermöglichkeiten sind doch sehr begrenzt. Wenn sich dies auch ab Windows 2008 schon merklich gebessert hat.

Eine echte Alternative ist da die Logauswertung über die Powershell.

Get-EventLog

Sie können mit dem cmdLet get-eventlog granular filtern. Auch der Remoteabruf eines Logs ist ohne weiteres möglich. Im Folgenden sehen Sie einige Beispiele, denen aber keine Grenzen gesetzt sind.

Beispiel 1:

Wurde ein Server in den letzten 30 Tagen gebootet? Dazu brauchen Sie die EventID 6005 aus dem System EventLog, die vermeldet, dass das EventLog gestartet wurde. Dies geschieht immer nach einem Reboot.

get-eventlog -Computername “Server” -logname system -entrytype information -after (get-date).adddays(-30) |? {$_.EventID -eq 6005} |fl Timegenerated

Zurück geliefert wird das Datum und die Uhrzeit des Eintrags.

Beispiel 2:

Sie möchten wissen, wann zuletzt die Systemzeit eines Remote Servers synchronisiert wurde. Suchen Sie dazu nach der EventID 35 im SystemLog

get-eventlog -Computername “Server” -LogName system -EntryType information -after (get-date).adddays(-100) |? {$_.eventid -eq 35} | fl timeg*,mess*,eve*

Beispiel 3:

Sie rufen alle Error Meldungen des Application Logs der letzten 30 Tage ab

get-eventlog -Computername “Server” -logname application -entrytype error -after (get-date).adddays(-30)

Damit erhalten Sie natürlich eine Vielzahl von Meldungen, die Sie gar nicht interessieren. Angenommen, eine remote Maschine verursacht auf einem DC diverse Fehler, die Sie aber in Ihrer Auswertung ignorieren möchten, dann erreichen Sie das mit folgendem Ausschluss auf dem DC:

get-eventlog -Computername “DCName” -logname application -entrytype error -after (get-date).adddays(-30) |? {$_.message -notlike “Servername”}

Kosmetik:

Wenn Sie sich das ganze noch als GridView ausgeben lassen und somit auch in der Lage sind, graphisch zu filtern, können Sie den Event Viewer gänzlich vergessen.

get-eventlog -logname application -entrytype information -after (get-date).adddays(-30) |out-gridview

eventviewer

Get-WinEvent

Mit Get-WinEvent können Sie noch viel mehr Optionen nutzen. Mit dem Parameter –ComputerName ist der Abruf auch remote möglich. Ein großer Vorteil ist, dass Sie gleichzeitig mehrere Logs durchsuchen können, was so einfach mit Get-EventLog nicht möglich ist. Die Abfrage über Get-WinEvent ist zudem wesentlich schneller als Get-EventLog. Sie erreichen auch die Windows Logs über dieses CMDLet.

1

Sie können Events damit auch über die XML Pfade suchen. Sehen Sie sich dazu die XML Ansicht eines Events im EventViewer an:

2

Der Level stellt jeweils den EntryType des Events dar:

  • 2 = Error
  • 3 = Warning
  • 4 = Information

Über den Parameter –FilterHashTable geben Sie z.B. beliebige Suchkriterien an.

Und Hier einige Beispiele:

Beispiel 1:

Sie möchten die letzten 50 Events aus den Logs Application und System sehen.

Get-WinEvent -LogName appl*,sys* -MaxEvents 50

Beispiel 2:

Sie möchten alle Fehler der letzten 24 Stunden im System Log sehen.

Get-WinEvent -FilterHashtable @{logname=”system”;level=2;starttime=(get-date).addhours(-24)}

Beispiel 3:

Sie möchten aus dem Windows Log Microsoft-Windows-Kernel-EventTracing/Admin alle Events mit dem Opcode 14 sehen. Achten Sie darauf, dass die Abfrage des XML Pfades Case Sensitive ist!

Get-WinEvent -LogName “Microsoft-Windows-Kernel-EventTracing/Admin” -FilterXPath “*/System[Opcode=14]”

Beispiel 4:

Sie möchten sehen, ob das letzte Windows Backup auf einer Remote Maschine erfolgreich durchgelaufen ist.

Get-WinEvent -ComputerName Computername -FilterHashtable @{logname=”Microsoft-Windows-Backup”;Id=14} -MaxEvents 1

Beispiel 5:

Zum Abschluss noch eine Suche, die sehr deutlich macht, dass in Flexibilität und Geschwindigkeit der Event Viewer auch nicht ansatzweise mithalten kann.

Zuerst lesen wir alle verfügbaren Logs mit Einträgen in eine Variable.

$Logs = Get-WinEvent -ListLog * |? {$_.RecordCount -gt 0}

Damit sind auch alle Windows- und Anwendungslogs enthalten.

Aus diesen suchen wir nun die gewünschte Information. Im Beispiel suchen wir nach dem letzten Fehler, den Outlook verursacht hat.

$Logs | % {Get-WinEvent -FilterHashtable @{LogName=$_.LogName;level=2} |? {$_.Message -match “outlook”} -ea si} |select * -First 1

Testen Sie das Beispiel. Sie werden absolut überrascht sein, mit schnell das Ergebnis erscheint.

 

Posted in Allgemein, Dies und Das, Powershell, Windows, Windows 2008, Windows 2012, Windows 8 | No Comments »