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-ID: 2699169742

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

Ausgedruckt am: 24.11.2024 um 18:11 Uhr

tech-flare
tech-flare 05.05.2022 aktualisiert um 22:18:02 Uhr
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ß
SaberGFX
SaberGFX 05.05.2022 um 22:24:39 Uhr
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
rubberman
Lösung rubberman 06.05.2022 um 07:52:07 Uhr
Goto Top
Per PowerShell ungefähr so (ungetestet):
Get-Content -Path H:\messages -Tail 0 -Wait | ?{$_ -match 'test'} | %{'found'}  

Steffen
erikro
erikro 06.05.2022 um 09:14:26 Uhr
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
148523
148523 06.05.2022 um 09:45:21 Uhr
Goto Top
SaberGFX
SaberGFX 06.05.2022 um 12:17:23 Uhr
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.
colinardo
colinardo 06.05.2022 aktualisiert um 13:47:51 Uhr
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
rubberman
rubberman 06.05.2022 um 13:50:22 Uhr
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
SaberGFX
SaberGFX 06.05.2022 um 19:38:52 Uhr
Goto Top
Danke an alle für die spitzen Hilfe!