[C#] Mit Windows Powershell die letzten x Zeilen eines Logfiles behalten

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.

Kolja Engelmann

Technikfan, Freizeitprogrammierer, selbsternannter Toolking und vermutlich größter Drachenfan Deutschlands blogged hier die Lösungen zu IT-Problemen die ihm über den Weg laufen, kleine Softwaretools, nostalgische Anfälle und missbraucht das Ganze gern auch mal als privates Tagebuch und Fotoalbum.

Das könnte dich auch interessieren …

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert