Powershell Text Log zerlegen mit Regex
Hi in die Runde,
folgende LogStruktur:
und wieder ein kleiner Nebenkriegsschauplatz. ;(
Jetzt will ich die einzelnen Bestandteile aufteilen und am Ende eine Liste von Objekten füllen um darin mir Ergebnisse rauszuziehen.
Jedes Object hat:
$Datum
$Benutzername
$Status (Success oder Start oder !ABORT!)
Status geht.
Datum funktioniert auch:
Der Match für den Benutzernamen will noch nicht:
Hier hört er nach dem ersten ")" nicht auf sondern nimmt den gesammten Rest der Zeile.
Die Zeichenlänge des Benutzernamens ist nicht immer gleich daher ist es schon wichtig das die ")" als Ende gefunden wird.
2te Variante mag auch nicht:
Die Benutzernamen setzen sich immer aus 4 Buchstaben und 1-5 Zahlen zusammen.
Wo hab ich hier den Knoten?
VG
folgende LogStruktur:
04.01.2018 07:34:00 (u:benutzer) : Success ( Execution Package - Install )
04.01.2018 07:33:00 (u:benutzer) : Start ( Execution Package - Install )
04.01.2018 07:32:00 (u:benutzer) : !ABORT! ( Execution Package - Install )
04.01.2018 07:31:00 (u:benutzer) : Start ( Execution Package - Install )
und wieder ein kleiner Nebenkriegsschauplatz. ;(
Jetzt will ich die einzelnen Bestandteile aufteilen und am Ende eine Liste von Objekten füllen um darin mir Ergebnisse rauszuziehen.
Jedes Object hat:
$Datum
$Benutzername
$Status (Success oder Start oder !ABORT!)
Status geht.
Datum funktioniert auch:
$Datum = $_ -match '\d..\S+\S+\s'
Der Match für den Benutzernamen will noch nicht:
$_ -match '\((.*)\)'
Hier hört er nach dem ersten ")" nicht auf sondern nimmt den gesammten Rest der Zeile.
Die Zeichenlänge des Benutzernamens ist nicht immer gleich daher ist es schon wichtig das die ")" als Ende gefunden wird.
2te Variante mag auch nicht:
$_ -match '^[a-z]{1,4}[0-9]{1,5}$'
Die Benutzernamen setzen sich immer aus 4 Buchstaben und 1-5 Zahlen zusammen.
Wo hab ich hier den Knoten?
VG
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 368930
Url: https://administrator.de/forum/powershell-text-log-zerlegen-mit-regex-368930.html
Ausgedruckt am: 16.04.2025 um 15:04 Uhr
9 Kommentare
Neuester Kommentar
Warum?
Weil du mein Datum (was ich in dem Custom Object übrigens bereits zu einem "echten" Datums-Object konvertiert habe
Ich glaub da ist wieder n' Kaffee fällig ... 
btw. beachte auch die Zeiten
.
Gut's nächtle (bin ein paar Zeitzonen voraus).
$min = get-date '01.01.2018'
$max = get-date '01.03.2018'
$result = [regex]::matches((gc 'C:\logdatei.log' -raw),'(?im)^([\d\s\.:]+)\(u:([^\)]+)\)\s*:\s*([^\s]+)').Captures | %{[pscustomobject]@{Datum=get-date $_.Groups[1].Value;Benutzername=$_.Groups[2].Value;Status=$_.Groups[3].Value}}
$result | ?{$_.Datum.Date -ge $min -and $_.Datum.Date -lt $max}
Gut's nächtle (bin ein paar Zeitzonen voraus).
Sprich 01.04. steht für 4. Jan und 02.06. für 6. Feb.
Stichwort "Culture" ! Du bist sehr wahrscheinlich auf einem englischen System und dort sind Monat und Tag getauscht interpretiert, du kannst das aber bei der Umwandlung in ein Datum definieren.Guckst du
[datetime]::Parse("01.03.2018",[cultureinfo]'de')