PowerShell EventLog informationen filtern
Hallo,
mit Hilfe von Get-EventLog hole ich mir bestimmte Einträge in ein Array. Das Array verfügt über drei für mich wichtige Spalten (Timewritten, EntryType und Message). Die Werte der Spalten lege ich nach einem Regex mit der Spalte Message (übrig bleibt nur eine IP-Adresse) in einer DataTable ab und möchte mit dieser Weiterarbeiten.
Ziel meines Skriptes ist es den aktuellsten Eintrag zu einer bestimmten Message zu erhalten. Daraufhin möchte ich den EntryType prüfen und nur Warnings und Errors in ein neues Array schreiben. Vielleicht ist die DataTable nicht das richtige Werkzeug, aber das Array in dem ich die Events mit Get-EventLog sammle wird beim modifizieren als ReadOnly gekennzeichnet.
Hier mein bisheriges:
So mein Problem ist nun das ich zwar alle Meldungen zu einer Message habe, aber ich kann im Array AllMessages2oneIP keine Spalten mehr ansprechen. Ich möchte dort aber gerne das Datum vergleichen und dann beim aktuellsten Eintrag auf den EntryType schauen. Hat jemand von euch eine Idee?
mit Hilfe von Get-EventLog hole ich mir bestimmte Einträge in ein Array. Das Array verfügt über drei für mich wichtige Spalten (Timewritten, EntryType und Message). Die Werte der Spalten lege ich nach einem Regex mit der Spalte Message (übrig bleibt nur eine IP-Adresse) in einer DataTable ab und möchte mit dieser Weiterarbeiten.
Ziel meines Skriptes ist es den aktuellsten Eintrag zu einer bestimmten Message zu erhalten. Daraufhin möchte ich den EntryType prüfen und nur Warnings und Errors in ein neues Array schreiben. Vielleicht ist die DataTable nicht das richtige Werkzeug, aber das Array in dem ich die Events mit Get-EventLog sammle wird beim modifizieren als ReadOnly gekennzeichnet.
Hier mein bisheriges:
$IP =@()
$regex = [regex] "\b(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b"
$events=get-eventlog myOwn -After (get-date).AddDays(-1)
#Anlegen einer DataTable um die Events einzutragen
$dt = New-Object System.Data.DataTable
$dt.Columns.Add('Timewritten') | Out-Null
$dt.Columns.Add('EntryType') | Out-Null
$dt.Columns.Add('Message') | Out-Null
foreach ($event in $events){
$regex.Matches($event.Message) | %{$dt.Rows.Add($event.Timewritten, $event.EntryType, $_.value)}
}
#$dt
$IPs = $dt.Message | Select -Unique
$AllMessages2oneIP = @()
foreach ($Adress in $IPs){
AllMessages2oneIP = $dt | ?{$_.Message -eq $Adress}
}
So mein Problem ist nun das ich zwar alle Meldungen zu einer Message habe, aber ich kann im Array AllMessages2oneIP keine Spalten mehr ansprechen. Ich möchte dort aber gerne das Datum vergleichen und dann beim aktuellsten Eintrag auf den EntryType schauen. Hat jemand von euch eine Idee?
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 309291
Url: https://administrator.de/contentid/309291
Ausgedruckt am: 24.11.2024 um 02:11 Uhr
1 Kommentar
Hi.
This is your failure:
So what you are doing here is: Select "only" the message field for uniques. So your resulting variable $IPs holds only the message property!!
I would do this kind of stuff with group-object to group the rows of the data table and sort the corresponding entries for the IP.
Now you have an Array with all unique IP addresses and all their corresponding Events sorted from latest to oldest.
If you now want to get the latest entry for an IP
Select the first entry in the group column.
Regards
This is your failure:
$IPs = $dt.Message | Select -Unique
I would do this kind of stuff with group-object to group the rows of the data table and sort the corresponding entries for the IP.
$IPs = $dt.Rows | group Message
$IPs | %{$_.Group = $_.Group | sort TimeWritten -Desc}
If you now want to get the latest entry for an IP
$IPs | ?{$_.message -eq "192.168.1.20"} | %{$_.Group.Entrytype}
Regards