Tail using PowerShell
07 Oct 2017| PowerShell
Betrachten Sie ein Szenario, in dem Sie ein Problem auf einem Produktionsserver diagnostizieren. Sie haben die Protokolle aktiviert und alles eingerichtet, um das Problem zu reproduzieren. Stellen Sie den Auslöser in die Warteschlange, um den fehlerhaften Vorgang aufzurufen, und warten Sie schließlich darauf, dass die Protokolldatei aktualisiert wird.
Es macht keinen Spaß, auf die Änderung der Größe der Protokolldatei zu starren oder die Datei regelmäßig zu aktualisieren. Ich möchte in dem Moment benachrichtigt werden, in dem die Protokolldatei in Echtzeit aktualisiert wird. Das ist genau das, was ein Programm wie tail
tut – es überwacht die Datei auf Änderungen und gibt das Ende der Datei aus.
Es gibt ein paar Versionen von Tail, die diese Aufgabe perfekt erfüllen, aber da es sich um eine Produktionsumgebung handelt, wollte ich keine neuen Tools installieren.
Glücklicherweise hat das PowerShell-Cmdlet Get-Content
diese Funktionalität eingebaut. Ich habe mich schließlich für folgende Kombination entschieden:
Get-Content log.txt -tail 5 -wait
Das Argument -tail
gibt die Anzahl der Zeilen an, die ab dem Ende der Datei angezeigt werden sollen, und -wait
gibt an, dass die Datei weiterhin überwacht werden soll.
Zugegeben, diese Methode hat nicht die Hervorhebungsfähigkeiten, die ein dediziertes Tool haben würde, aber es ist eine ziemlich nützliche Option, die man in der Not hat.
Schließlich kann man ein paar Tastenanschläge sparen, indem man den Alias verwendet:
cat log.txt -tail 5 -wait
Aktualisierung 2019-01-30: Ich hatte kürzlich die Anforderung, eine Datei auf einen bestimmten Text zu überwachen und dann den Zeitstempel zu notieren, wann er geschrieben wurde. Es basiert auf diesem Lösungsvorschlag.
cat .\processed-users.txt -tail 5 -wait | ? { $_ -like ‘SEARCH_STRING_HERE’ } | % { Write-Host $(Get-Date -Format T) -noNewLine -ForegroundColor Blue; Write-Host ” $_” }