PowerShell: podgląd pliku na żywo

W jaki sposób przeglądać tylko ostatnie wpisy w pliku? Jak wyświetlać tylko ostatnie/nowe wiersze w pliku? Jak automatycznie odświeżać zawartość logu?

Do przeglądania zawartości logów, plików tekstowych najbardziej nadaje się polecenie PowerShell Get-Content, posiada ono stosowne odpowiednie parametry np -last (można używać -tail) tak aby wyświetlać tylko ostatnie wpisy. Przykład takiego kompletnego polecenia które należy ponawiać wygląda tak

Get-Content .\file.log -last 5

wyniki są poprawne jednak klikanie co chwile może trochę zmęczyć użytkownika, dlatego z pomocą przychodzi nam prosty oneliner. Dodajmy parametr -wait oraz wybierzmy obiekty w pętli: dorzucając do tego prefiks NEW. Całość będzie miała postać:

Get-Content .\file.log -last 0 -Wait | foreach {"NEW: " + $_ }

a wynik będzie wyglądał tak:

wszystko dzieje się samo, dopóki nie zamkniemy sesji terminala lub zakończymy wykonywanie polecenia poprzez wciśnięcie CTR+C a. Prosto i skutecznie.

Rozbudujmy trochę naszego onlinera i dodajmy kolor tak aby rzucał się w oczy każdy nowy wiersz w przeglądanym przez nas pliku:

Get-Content .\file.log -last 0 -Wait | foreach {(Write-Host "NEW: " -foregroudcolor green -nonewline) + $_ }

Mamy sprawdzony sposób na przeglądanie logów w konsoli. Zamienimy onlinera w funkcje Get-LastEntry – w końcu będziemy z niego często korzystać:

#sprawdzone.it - function Get-LastEntry
#Opis: Funkcja monitoruje plik dziennika i wyświetla nowe wpisy w czasie rzeczywistym
function Get-LastEntry {
    param(
        [Parameter(Mandatory=$true)]
        [string]$logfile
    )
    Get-Content $logfile -last 0 -Wait | foreach { (Write-Host "NEW: " -ForegroundColor Green -NoNewline) + $_ }
}

Jeżeli mój wpis Ci się spodobał, pomógł w pracy? Chcesz mnie wspierać? Postaw kawę! To dzięki waszemu wsparciu nie ma reklam! Poniżej kod QR do płatności który jest jednocześnie linkiem do PayPal.

Obrazek posiada pusty atrybut alt; plik o nazwie Kod-QR.png