derwowusste
Goto Top

Eventlog - Details mit Powershell auslesen und auswerten

Moin Kollegen.

Ich fange mit zwei Screenshots an:
untitled1
untitled2

Ich suche nach einer Möglichkeit, den markierten Wert (Anzahl an Millisekunden) auszuwerten.
Ich möchte, dass nur bei Werten größer als 5000 Millisekunden etwas geschieht, beispielsweise in ein Log geschrieben wird "langsame Verarbeitung auf PC xy"

Das Log auszulesen, bekomme ich hin:
$Date = (Get-Date).AddDays(-1)
Get-WinEvent -FilterHashtable @{ LogName='Microsoft-Windows-GroupPolicy/Operational'; StartTime=$Date; Id='5016' }| select TimeCreated,message  
Aber um dann aus Ergebniszeilen wie
15.02.2022 19:46:05 Die Verarbeitung der Group Policy Services-Erweiterung wurde in 110 Millisekunden abgeschlossen.
nur die Millisekundenanzahl zu filtern und zu entscheiden, größer/kleiner 5000, dazu reichen meine bescheidenen Skriptingkünste nicht.

Hat jemand einen Tipp für mich?

Content-Key: 1933681867

Url: https://administrator.de/contentid/1933681867

Printed on: April 24, 2024 at 12:04 o'clock

Member: colinardo
Solution colinardo Feb 17, 2022 updated at 09:11:22 (UTC)
Goto Top
Servus DWW,
gibt mehrere Wege nach Rom
$Date = (Get-Date).AddDays(-1)
Get-WinEvent -FilterHashtable @{ LogName='Microsoft-Windows-GroupPolicy/Operational'; StartTime=$Date; Id='5016' } -EA SilentlyContinue | ?{$_.Properties.Value -gt 5000 }  
oder über Filterung mit Where-Object und XML Object
$Date = (Get-Date).AddDays(-1)
Get-WinEvent -FilterHashtable @{ LogName='Microsoft-Windows-GroupPolicy/Operational'; StartTime=$Date; Id='5016' } -EA SilentlyContinue | ?{[int](([xml]$_.toXML()).Event.EventData.Data |?{$_.Name -eq 'CSEElaspedTimeInMilliSeconds'}).innerText -gt 5000}   
oder auch direkt mit Auswertung im -FilterXPath Parameter
$Date = (Get-date).AddDays(-1).ToUniversalTime().ToString('o')  
Get-WinEvent -LogName 'Microsoft-Windows-GroupPolicy/Operational' -FilterXPath "*[System[EventID=5016 and TimeCreated[@SystemTime > '$date']] and EventData[Data[@Name='CSEElaspedTimeInMilliSeconds'] > 5000]]" -EA SilentlyContinue  

Such dir was aus face-smile.

Grüße Uwe
Member: DerWoWusste
Solution DerWoWusste Feb 17, 2022 at 09:08:39 (UTC)
Goto Top
Wow, das sind doch alles Toplösungen, vielen Dank, Uwe!
Ich versuche mal, das nachzuvollziehen und mein Skriptingarsenal aufzustocken...
Member: colinardo
colinardo Feb 17, 2022 updated at 09:19:38 (UTC)
Goto Top
Immer gerne face-smile. Mit dem XPath-Filter der letzten Variante könntest du dann auch direkt ein Eventlogtrigger erstellen falls gewünscht (den Zeit-Filter müsstest du dann nur raus nehmen).
<QueryList>
  <Query Id="0" Path="Microsoft-Windows-GroupPolicy/Operational">  
    <Select Path="Microsoft-Windows-GroupPolicy/Operational">*[System[EventID=5016] and EventData[Data[@Name='CSEElaspedTimeInMilliSeconds'] > 5000]]</Select>  
  </Query>
</QueryList>