sabergfx
Goto Top

PowerShell - Logfile überwachen

Hallo zusammen,

ich habe einen Zentralen Syslogserver. Die Logdatei würde ich gerne Live überwachen und bei speziellen Ereignissen eine Benachrichtigung erhalten.
Leider habe ich keine Ahnung, wie ich hier ansetzten muss.

Mein jämmerlicher Versuch war der folgende:

$logmon = Get-Content -Path H:\messages -Tail 100 -Wait

if ($logmon -like "test") {  
    Write-Output "Test"  
}

Für eure Hilfe wäre ich sehr dankbar.

Content-Key: 2699169742

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

Printed on: April 26, 2024 at 10:04 o'clock

Member: tech-flare
tech-flare May 05, 2022 updated at 20:18:02 (UTC)
Goto Top
Zitat von @SaberGFX:

Hallo zusammen,
Hallo

ich habe einen Zentralen Syslogserver.
Teilst du uns auch mit, welchen du genau einsetzt?

Die Logdatei würde ich gerne Live überwachen
Dafür ist ja der Syslog Server da.
und bei speziellen Ereignissen eine Benachrichtigung erhalten.

Warum willst du das mit Powershell und nicht mit dem Syslog Server machen?

Gruß
Member: SaberGFX
SaberGFX May 05, 2022 at 20:24:39 (UTC)
Goto Top
Teilst du uns auch mit, welchen du genau einsetzt?
Der Syslogserver Dienst auf einer Qnap.

Warum willst du das mit Powershell und nicht mit dem Syslog Server machen?
Dachte das wäre einfacher face-smile
Member: rubberman
Solution rubberman May 06, 2022 at 05:52:07 (UTC)
Goto Top
Per PowerShell ungefähr so (ungetestet):
Get-Content -Path H:\messages -Tail 0 -Wait | ?{$_ -match 'test'} | %{'found'}  

Steffen
Member: erikro
erikro May 06, 2022 at 07:14:26 (UTC)
Goto Top
Moin,

Zitat von @SaberGFX:

Teilst du uns auch mit, welchen du genau einsetzt?
Der Syslogserver Dienst auf einer Qnap.

Aus dem Handbuch:

eMail-Benachrichtigung: Der NAS unterstützt das Versenden von eMail-Nachrichten an angegebene eMail-Adressen (maximal 2, zu konfigurieren unter „Systemeinstellungen“ > „Benachrichtigung“ > „Alarmbenachrichtigung“), wenn die Schwere der empfangenen Syslog-Meldungen der angegebenen Stufe entspricht. Konfigurieren Sie zur Verwendung dieser Funktion die SMTP-Servereinstellungen unter „Systemeinstellungen“ > „Benachrichtigung“ > „SMTP-Server“. Aktivieren Sie anschließend die eMail-Benachrichtigung und wählen den Schweregrad unter „Anwendungen“ > „Syslog-Server“ > „Servereinstellungen“ aus. Klicken Sie auf „Übernehmen“, um die Einstellungen zu speichern.

Warum willst du das mit Powershell und nicht mit dem Syslog Server machen?
Dachte das wäre einfacher face-smile

Nein. face-wink

Liebe Grüße

Erik
Mitglied: 148523
148523 May 06, 2022 at 07:45:21 (UTC)
Goto Top
Member: SaberGFX
SaberGFX May 06, 2022 at 10:17:23 (UTC)
Goto Top
Zitat von @rubberman:

Per PowerShell ungefähr so (ungetestet):
Get-Content -Path H:\messages -Tail 0 -Wait | ?{$_ -match 'test'} | %{'found'}  

Steffen

Ja richtig geil, vielen Dank.

Könntest du mir die 2 Pipes erklären? Warum dort
?{$_
etc.
Member: colinardo
colinardo May 06, 2022 updated at 11:47:51 (UTC)
Goto Top
Zitat von @SaberGFX:
Ja richtig geil, vielen Dank.

Könntest du mir die 2 Pipes erklären? Warum dort
?{$_
etc.

Servus,
ich spiele mal Powershell <> Deutsch Übersetzer wenns erlaubt ist face-smile.

Get-Content -Path H:\messages -Tail 0 -Wait
Liest den Inhalt der Textdatei ein, setzt den Zeiger aber ans Ende der Datei, so das keine vorherigen Zeilen ausgegeben werden und wartet unendlich lange auf weitere neue Zeilen die in die Datei geschrieben werden. Die Datei wird hier jede Sekunde auf Änderungen überprüft.
| ?{$_ -match 'test'}
Der Inhalt wird nun Zeilenweise über die Pipeline an ein Where-Object übergeben ?{} ist eine Abkürzung dafür. Das $_ ist die Pipeline-Variable die den Inhalt bzw. das Object enthält das über die Pipeline übergeben wurde, in diesem Fall die Zeile(n) die neu in die Datei geschrieben wurden. Das Where-Object lässt nur die Objekte durch die Pipeline, für welche die Bedingung darin $true oder <> $null ergibt.
| %{'found'}
Die Objekte die das Where-Object durchgelassenen hat werden hier dann mit einem ForEach-Object verarbeitet (das %{} ist ebenfalls eine Abkürzung bzw. Alias dafür). In hiesigem Fall wird in der Foreach-Schleife einfach für jede neue Zeile ein 'found' auf der Konsole ausgegeben. Hier kannst du aber ebenfalls über $_ auf das Objekt (die Zeile) zugreifen und diese benutzen, z.B. um die Daten darin weiter zu verarbeiten. Z.B.
..... | %{"Die Zeile hatte folgenden Inhalt: $_"}  

Grüße Uwe

Noch etwas Lesestoff:
Powershell Leitfaden für Anfänger
Member: rubberman
rubberman May 06, 2022 at 11:50:22 (UTC)
Goto Top
Japp, wie Uwe schon geschrieben hat. Wenn dir nochmal jemand so komische Zeichen oder Cmdlet Namen ohne Bindestrich um die Ohren haut, dann sind das Alias Namen. Wirf mal ein Get-Alias in einen PowerShell Prompt, dann bekommst du eine Übersicht.

Steffen
Member: SaberGFX
SaberGFX May 06, 2022 at 17:38:52 (UTC)
Goto Top
Danke an alle für die spitzen Hilfe!