Für eine Datenauswertung benötigte ich die aktuellsten Einträge eines immer weiter wachsenden Logfiles, welches ich mir via HTTP periodisch von einem entfernten Windows PC abholte. Auf Dauer wurde das Logfile jedoch so groß, dass sich ein kompletter Download nicht mehr lohnte. Mittels der Windows Powershell wollte ich das Logfile auf dem Quellrechner regelmäßig bereinigen und lediglich die letzten 1000 Einträge beibehalten. Dass das so einfach sein würde, hatte ich dabei nicht erwartet.
// Set the variable $file Set-variable -Name file D:\test.log function TruncateLogfile() { // Fetch the Logfile, select the last x rows and write them into a temp file Get-Content $file | select -Last 1000 | set-content "$file-temp" // Overwrite the logfile with the temp-file's content. move "$file-temp" $file -Force } // Call the truncating method every 2 seconds until we stop the script while(1){ Start-Sleep -Seconds 2 TruncateLogfile }
Die eigentliche Arbeit macht dabei die vierte Zeile. „Get-Content <Filename> | select -Last <X>| set-content "<Output-Filename>"
“ Sie nimmt einen Pfad zu einer Datei entgegen, liest die letzten X Zeilen aus und schreibt das Ergebnis in eine andere, temporäre Datei.
Ich glaube ich sollte mich mal ein wenig mehr mit der Powershell befassen. Das gewünschte Ergebnis ließ sich nämlich so einfach erreichen, dass ich fortan auch andere immer wiederkehrende Aufgaben mal versuchen werde mit der Powershell zu lösen.