
Wie kann ich das Verhalten des Linux-Tails in PowerShell replizieren?
Ich führe eine Anwendung aus, die eine Protokolldatei ( error.log
) schreibt, und ich möchte die letzten Zeilen daraus sehen und die Konsole über Änderungen auf dem Laufenden halten.
Gibt es also ein Äquivalent zu etwas Ähnlichem tail -f filename
in PowerShell?
Antwort1
Ab PowerShell 3 unterstützt das Get-Content
(Alias ) Cmdlet und Parameter, wenn es auf einem Dateisystem verwendet wird. Suchen Sie danach mit .gc
-Tail
-Wait
help gc
Antwort2
Das native PS-Äquivalent seit PSv3 ist
Get-Content -Last n
was auch schnell ist. In PSv2 und darunter muss man sich begnügen mit
Get-Content filename | Select -Last n
Dies hat jedoch mehrere Nachteile. Beispielsweise kann es nicht blockieren und auf neue Änderungen an der Datei warten und ist auch nicht sehr effizient, da es die Datei von Anfang an vollständig lesen muss, bevor es die letzten Zeilen anzeigen kann.
PSCXhat einen Get-FileTail
Befehl, der einen -Wait
Parameter hat:
Name
Get-FileTail
Zusammenfassung
PSCX-Cmdlet: Verfolgt den Inhalt einer Datei – wartet optional auf neuen Inhalt.
Syntax
Get-FileTail [-Path] <String[]> [-Count <Int32>] [-Encoding <EncodingParameter>] [-LineTerminator <String>] [-Wait] [<CommonParameters>] Get-FileTail [-LiteralPath] <String[]> [-Count <Int32>] [-Encoding <EncodingParameter>] [-LineTerminator <String>] [-Wait] [<CommonParameters>]
Beschreibung
Diese Implementierung liest den Inhalt einer Datei effizient aus, indem Zeilen vom Ende gelesen werden, anstatt die gesamte Datei zu verarbeiten. Dieses Verhalten ist entscheidend für das effiziente Auslesen großer Protokolldateien und großer Protokolldateien über ein Netzwerk. Sie können den
Wait
Parameter auch angeben, damit das Cmdlet wartet und neuen Inhalt anzeigt, während er in die Datei geschrieben wird. Verwenden Sie Ctrl+, Cum aus der Warteschleife auszubrechen. Beachten Sie, dass das Cmdlet versucht, die Kodierung automatisch zu erkennen, indem es das erste Zeichen aus der Datei liest, wenn keine Kodierung angegeben ist. Wenn noch kein Zeichen in die Datei geschrieben wurde, verwendet das Cmdlet standardmäßig die Unicode-Kodierung. Sie können dieses Verhalten überschreiben, indem Sie die Kodierung explizit über den Parameter „Kodierung“ angeben.
Get-FileTail
wird tail
standardmäßig als Alias verwendet, wenn Sie PSCX installieren.