2016-04-13 6 views
1

Der folgende Powershell-Skript holt alle Systemfehler Ereignisse nur heute vorkommenden - es funktioniert:'GET-EVENTLOG' erstellt eine vollständige Objektliste und wird gefiltert? - geht es schneller?

Get-EventLog System -After ([datetime]::Today) | Where-Object { $_.EntryType -eq "Error" } 

Aber es kann einige Sekunden dauern, laufen: Ich vermute, das liegt daran, dass der first'Get-EventLog‘Cmdlets ist Generierung die vollständige Liste der alle Ereignisse zuerst; Anschließend wird mit dem Cmdlet "Where-Object" die Liste verkleinert.

Gibt es eine Möglichkeit, den 'Where-Object'-Filter als Argument für' Get-EventLog 'zu übergeben, damit jedes Objekt beim Abrufen getestet werden kann?

Ich spekuliere, dass ein solcher Mechanismus schneller ausgeführt werden könnte, da das 'Get-EventLog' nicht die vollständige Liste der Objekte verwalten müsste, die an das nachfolgende 'Where-Object' übergeben werden?

Aber ich rate nur hier.

Auch: das ist nicht so eine große Sache - es ist nur ein Punkt von Interesse/Verständnis meinerseits.

Antwort

3
Get-EventLog System -After ([datetime]::Today) -EntryType Error 

Ja, können Sie diesen Parameter im ursprünglichen Befehl angeben.

+0

Hoppla: Ich habe das in der Hilfe verpasst - ja - das geht viel schneller. – monojohnny

+0

(Aber ich denke, in * general * kann man einen Filter nicht einfach an willkürliche Cmdlets "weiterleiten", sondern muss sie am Ende der Object-Pipeline verbinden (was anscheinend Auswirkungen auf die Performance hat - besonders bei ein 'select-object First 1' zum Beispiel) – monojohnny

+0

tatsächlich - ich bin mir nicht sicher, dass es schneller ist (vielleicht hat es mehr damit zu tun, dass das EventLog eine sich dynamisch verändernde Sache ist, die vom System usw. gesperrt werden muss)): ist aber bequemer und einfacher zu lesen in jedem Fall – monojohnny

Verwandte Themen