Tail using PowerShell
07 Oct 2017| PowerShell
Overvej et scenario, hvor du skal diagnosticere et problem på en produktionsserver. Du har aktiveret logfilerne og fået alt konfigureret til at reproducere problemet. Du sætter triggeren i kø for at påkalde den fejlbehæftende operation og venter endelig på, at logfilen opdateres.
Det er ikke sjovt at stirre på, at logfilens størrelse ændres, og det er heller ikke sjovt at opdatere filen med jævne mellemrum. Jeg vil gerne have besked i det øjeblik, logfilen bliver opdateret i realtid. Det er præcis, hvad et program som tail
gør – det overvåger filen for ændringer og udsender filens hale.
Der findes et par inkarnationer af hale derude, der gør jobbet helt fint, men da dette var et produktionsmiljø, var jeg ikke holdt om at installere nye værktøjer.
Lucky, Get-Content
PowerShell cmdlet har denne funktionalitet indbygget. Dette er den kombination, som jeg til sidst besluttede mig for:
Get-Content log.txt -tail 5 -wait
Argumentet -tail
tager i antallet af linjer, der skal vises fra slutningen af filen, og -wait
angiver, at den skal fortsætte med at overvåge filen.
Godkendt, at denne metode ikke har fremhævningsmuligheder, som et dedikeret værktøj ville have, men det er en ret nyttig mulighed at have i en knibe.
Endeligt kan du spare et par tastetryk ved at bruge aliaset:
cat log.txt -tail 5 -wait
Ajourføring 2019-01-30: Jeg havde for nylig et krav om at overvåge en fil for noget tekst og derefter notere tidsstemplet for, hvornår det blev skrevet. Det er baseret på dette løsningsforslag.
cat .\processed-users.txt -tail 5 -tail 5 -wait | ? { $_ -like ‘SEARCH_STRING_HERE’ } | % { Write-Host $(Get-Date -Format T) -noNewLine -ForegroundColor Blue; Write-Host ” $_” }