Powershell: Zeilennummer einer Textdatei auslesen
Guten Tag Zusammen
Ich habe eine Frage bezüglich Zeilennummern in Textdateien.
Ich habe ein Logfile bei dem steht, ob ein Produkt aktiviert ist.
Da dieses Script jeden Monat ausgeführt wird, kann es vorkommen, dass im gleichen Logfile steht (Auf Datum achten):
"
19.02.2020 16:16:04; The product is already activated.
19.03.2020 16:16:04; Error
"
Nun möchte ich mit einem Script dieses Logfile durchsuchen, ob das Produkt aktiv ist. Jedoch kann ich nicht einfach nach dem String "The product is already activated" suchen, da es unten im File vielleicht einen Error gab oder umgekehrt.
Wie kann man nun herausfinden ob es nicht mehr aktiviert ist oder doch aktiviert? Kann man die Zeilennummer eines Textfiles herauslesen, damit ich die Zeilennummern vergleichen kann?
Schon mal ein Danke für die Hilfe.
Grüss
NogNog
Ich habe eine Frage bezüglich Zeilennummern in Textdateien.
Ich habe ein Logfile bei dem steht, ob ein Produkt aktiviert ist.
Da dieses Script jeden Monat ausgeführt wird, kann es vorkommen, dass im gleichen Logfile steht (Auf Datum achten):
"
19.02.2020 16:16:04; The product is already activated.
19.03.2020 16:16:04; Error
"
Nun möchte ich mit einem Script dieses Logfile durchsuchen, ob das Produkt aktiv ist. Jedoch kann ich nicht einfach nach dem String "The product is already activated" suchen, da es unten im File vielleicht einen Error gab oder umgekehrt.
Wie kann man nun herausfinden ob es nicht mehr aktiviert ist oder doch aktiviert? Kann man die Zeilennummer eines Textfiles herauslesen, damit ich die Zeilennummern vergleichen kann?
Schon mal ein Danke für die Hilfe.
Grüss
NogNog
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 562352
Url: https://administrator.de/contentid/562352
Ausgedruckt am: 20.11.2024 um 02:11 Uhr
4 Kommentare
Neuester Kommentar
Moin,
Es wird nach Error und nach The product is already activated. am Zeilenende gesucht, die Ergebnisse werden dann nach Zeilennummer sortiert und der letzte Fund wird ausgegeben.
Gruß Thomas
select-string -Path 'C:\Pfad\zum\Logfile.log' -Pattern 'Error$|The product is already activated.$' | sort -Property LineNumber | select -Last 1
Gruß Thomas
Moin,
Wenn du wie in diesem Fall weisst, das immer die selbe Anzahl an Zeichen vor der Zeichenkette die du benötigst stehen, bietet sich z. B. Substring an
Eine weitere Möglichkeit, wäre zum beispiel, die Zeichenkette bei dem Semikolon zu trennen; und nur den 2. Teil (also index 1) auszugeben
Eine 3. Möglichkeit, ist mit Replace und Regex zu arbeiten.
Ps: Bitte Code-Tags für das Posten von Code nutzen.
Gruß Thomas
Zitat von @NogNog:
Wie kann ich nun in einem "if" schauen ob es "Error" oder "Product is already activated." ist?
Das Problem ist, dass die Ausgabe vom $state1 nicht nur "Error" oder "The product is already activated." ist. Die Ausgabe wäre zum Beispiel: "19.02.2020 16:16:04; The product is already activated."
Dafür gibt es verschiedene Möglichkeiten, abhängig von dem was man gerade benötigt.Wie kann ich nun in einem "if" schauen ob es "Error" oder "Product is already activated." ist?
Das Problem ist, dass die Ausgabe vom $state1 nicht nur "Error" oder "The product is already activated." ist. Die Ausgabe wäre zum Beispiel: "19.02.2020 16:16:04; The product is already activated."
Wenn du wie in diesem Fall weisst, das immer die selbe Anzahl an Zeichen vor der Zeichenkette die du benötigst stehen, bietet sich z. B. Substring an
$state1.Line.Substring(20) # Gibt die Zeichenbkette ab dem 21. Zeichen aus
$state1.Line.split(';')[1]
Eine 3. Möglichkeit, ist mit Replace und Regex zu arbeiten.
$state1.Line -replace '.*(The Product|Error)','$1'
Ps: Bitte Code-Tags für das Posten von Code nutzen.
Gruß Thomas