2016-06-07 4 views
1

Ich habe ein Skript ausgeführt, das zwei Verzeichnisse spiegelt und eine Protokolldatei aktualisiert, was passiert zwischen den beiden Verzeichnissen. Ich möchte diese Protokolldatei analysieren, um Updates zu erhalten, sobald sie eingehen (während das Skript ausgeführt wird), und ich möchte, dass diese mir eine E-Mail mit den Änderungen senden, z. B. eine Benachrichtigung. Außerdem - ich möchte nicht mehr als einmal über die gleichen Informationen informiert werden, wenn möglich.Powershell analysieren Logfile bei der Aktualisierung

Ich bin unsicher, wie ich das tun würde, nachdem ich einige der Befehlslisten online gelesen habe.

Tldr; Wirklich alles, was ich tun möchte, ist, wenn eine Zeile der Logdatei hinzugefügt wird, analysieren Sie die Datei, um die aktualisierte Zeile zu erhalten, ohne eine der anderen Zeilen zu bekommen.

Nicht so stark mit PowerShell, so würde jede Hilfe sehr geschätzt werden.

Antwort

2

Sie können PowerShell jede neue Zeile so erhalten, wie sie kommt, indem Sie den Parameter -Wait an Get-Content übergeben. Sie können dies dann an einen Foreach-Object Skriptblock übergeben, um die von Ihnen benötigte Operation auszuführen.

Get-Content $logfile -Tail 0 -Wait | foreach { 
    "Another line was added: " + $_ 
} 

Das -Tail N Argument verursacht Get-Content nur die letzten N Zeilen zu erhalten; in diesem Fall Null. Dadurch wird alles, was bereits in der Datei vorhanden ist, übersprungen und nur neu hinzugefügte Zeilen an den Skriptblock übergeben.

Hinweis: Dieses Cmdlet wird so lange ausgeführt, bis Sie es mit Strg + C abbrechen (oder den PowerShell-Prozess anderweitig beenden), wodurch es für die Verwendung in einer interaktiven Eingabeaufforderung viel besser ist als in einem Skript.

+0

Vielen Dank, ich habe ewig nach diesem gesucht! Würde ich das E-Mail-Skript in die foreach geben, damit es mir jede neue Zeile per E-Mail sendet? dann würde das jede Zeile per E-Mail schicken, wie es richtig kommt? Danke nochmal! :) – flanelman

+0

Sie würden Befehle in den 'foreach {...}' Block setzen. Innerhalb dieses Blocks enthält die Variable '$ _' die vollständige Zeile, die hinzugefügt wurde. –

+0

also sollte ich "$ _" mailen? wie der Körper, wie das die Linie enthält? :) – flanelman

Verwandte Themen