Logfile auslesen nach Keywords und Ausgabe mit nächster Zeile ausgeben
Hallo Zusammen,
ich möchte Logfiles monitoren.
Normal nutze ich dafür PRTG mit dem Sensor -- Datei-Inhalt --.
Dort kann ich nach bestimmten Wörtern suchen und dem Sensor entsprechende Eigenschaften geben was er dann tun soll.
Oft wird es je nach Aufbau des Logfiles etwas tricky und dann macht ein Powershell script mehr Sinn.
Aktuell habe ich den Fall das ich ein Logfile nach einem bestimmten Fehler auslesen möchte und wenn er auftritt er mir den Fehler und zusätzlich die nächste Zeile dazu ausgeben soll. Beispielsweise in einer csv die dann per sendmail an eine status adresse gesendet wird.
Am Ende bekomme ich halt so mit das bei einem Kunden oder Lieferanten die Adresse in den Stammdaten falsch hinterlegt ist ohne dafür extra manuell in das Logfile zu schauen.
Beispiel:
Zeile 1: Fehlercode aus der Software: Fehler beim SMTP Versand
Zeile 2: weitere Beschreibung: *sendmailstmp error: could not be send to mailadress@server.xy
Bin über jede Hilfe dankbar!
Ungefähr so:
Get-ChildItem -Path C:\logfiles -Include "access.log" -Recurse | Select-String -Pattern "Fehler beim SMTP Versand" (Fehlt halt noch die nächste Zeile und das umlenken in eine csv)
ich möchte Logfiles monitoren.
Normal nutze ich dafür PRTG mit dem Sensor -- Datei-Inhalt --.
Dort kann ich nach bestimmten Wörtern suchen und dem Sensor entsprechende Eigenschaften geben was er dann tun soll.
Oft wird es je nach Aufbau des Logfiles etwas tricky und dann macht ein Powershell script mehr Sinn.
Aktuell habe ich den Fall das ich ein Logfile nach einem bestimmten Fehler auslesen möchte und wenn er auftritt er mir den Fehler und zusätzlich die nächste Zeile dazu ausgeben soll. Beispielsweise in einer csv die dann per sendmail an eine status adresse gesendet wird.
Am Ende bekomme ich halt so mit das bei einem Kunden oder Lieferanten die Adresse in den Stammdaten falsch hinterlegt ist ohne dafür extra manuell in das Logfile zu schauen.
Beispiel:
Zeile 1: Fehlercode aus der Software: Fehler beim SMTP Versand
Zeile 2: weitere Beschreibung: *sendmailstmp error: could not be send to mailadress@server.xy
Bin über jede Hilfe dankbar!
Ungefähr so:
Get-ChildItem -Path C:\logfiles -Include "access.log" -Recurse | Select-String -Pattern "Fehler beim SMTP Versand" (Fehlt halt noch die nächste Zeile und das umlenken in eine csv)
Please also mark the comments that contributed to the solution of the article
Content-Key: 1969229851
Url: https://administrator.de/contentid/1969229851
Printed on: April 28, 2024 at 18:04 o'clock
5 Comments
Latest comment
Get-ChildItem -Path C:\logfiles -Include "access.log" -Recurse -File | select-string -Pattern 'Fehler beim SMTP Versand' -SimpleMatch -Context 1 | select Path,@{n='ErrorLine';e={$_.Line}},@{n='NextLine';e={$_.Context.PostContext}} | export-csv .\ergebnis.csv -delimiter ";" -NoTypeInformation -Encoding UTF8
Zitat von @askando:
Er nimmt nur die erste Mailadresse die er im Log findet und zeigt dann alle fehlgeschlagenen Versuche an.
Hier wird keine Mail-Adresse gesucht sondern die oben von dir gepostete Fehlermeldung und für jede Zeile in der diese Steht wird dessen benachbarte nächste Zeile mit ausgegeben.Er nimmt nur die erste Mailadresse die er im Log findet und zeigt dann alle fehlgeschlagenen Versuche an.
Genau das müsste er halt noch für alle weiteren Mailadressen machen die unten im Logfile stehen.
??wie oben beschrieben die Fehlermeldung ist immer die selbe, Unterschiede sind dann immer nur in der zweiten Zeile.
Klar und die wird ja mit ausgegeben ...verstehe nicht was du sonst willst, das Skript macht genau das was du oben in der Ursprungsfrage gefragt hast ... Wir kennen den Aufbau deiner Logfiles ja nicht.Get-ChildItem -Path C:\logfiles -Include "access.log" -Recurse -File | %{
select-string -Path $_.Fullname -Pattern 'Fehler beim SMTP Versand' -SimpleMatch -Context 1 | select Path,@{n='ErrorLine';e={$_.Line}},@{n='NextLine';e={$_.Context.PostContext}} | group Nextline | %{$_.Group}
} | export-csv .\ergebnis.csv -delimiter ";" -NoTypeInformation -Encoding UTF8