Mittwoch, 24. Mai 2017

Powershell: Viele Files einzeln löschen

Um so länger man sich nicht um seinen Server kümmert, umso mehr arbeit steht einem bei einem Upgrade oder bei Problemen bevor.

Vorgeschichte: Seit mehreren Jahren betreibe ich unterschiedliche Server mit mehr oder minderen Erfolg....

Nun wird aber immer mehr der Speicherplatz belegt. Aber was mir jetzt bei einem Server untergekommen ist, habe ich noch nie gesehen.

Bei der Suche nach löschbaren Files ist mir der Datenträgerbereinigungsassisten immer hängen geblieben. Nach Durchsicht, welche Schritte er durchführt bin ich über das Löschen des TEMP-Verzeichnisses auf C:\Windows\Temp gestoßen.

Lt. Explorer, welcher es nicht einmal schaffte, alles fertig zu laden, zeigte in etwa mehr als 3 Mio. Files an.



Wie kann man also ein Verzeichnis leer räumen, welches schon nicht mal im Explorer zum Ansehen geht.

Naja ganz einfach per Powershell...

$i=0
Get-ChildItem -path "C:\Windows\Temp" -OutBuffer 1 | foreach ($_) {del $_.FullName;Write-Host "Deleting $_";$i++;write-host $i}


Wichtig ist hier der Parameter "-OutBuffer". Dieser gibt an, wie viele Objekte zuerst von Get-ChildItem eingelesen werden, bevor sie an die Pipe weitergegeben werden.

Da das warten bis über 3 Mio. Files eingelesen sein würden zu lange dauert, habe ich mich dafür entschieden, jede Datei einzeln dem Del-Befehl zu übergeben. Dies mag vlt. nicht effizient sein, aber es werden somit wenigstens die Dateien gelöscht (alle anderen möglichkeiten haben im nichts geendet).

Die Ausgabe sieht (inkl. des stylischem Zählwerkes) so aus...



So nun brauche ich nur noch zu warten bis meine 3 Mio Files gelöscht sind...


1. Versuch OHNE Zählwerk