Komprimieren eines NTFS-Ordners mit PowerShell

Mit den WMI-Methoden Compress() und Uncompress() ist das Komprimieren eines NTFS-Ordners leicht zu lösen.

In Pocket speichern vorlesen Druckansicht
Lesezeit: 1 Min.
Von
  • Dr. Holger Schwichtenberg

Eines unserer auf Windows PowerShell basierenden Backup-Skripte habe ich heute erweitert um die Möglichkeit, Ordner zu komprimieren, um Festplattenplatz zu sparen. Das Komprimieren eines Ordners auf einem NTFS-Medium erledigt man in einer Zeile mit der Compress()-Methode in der WMI-Klasse Win32_Directory:

Invoke-WmiMethod -Path "Win32_Directory.Name='$ordner'" -Name compress 

Die Aufhebung der Komprimierung erfolgt mit:

Invoke-WmiMethod -Path "Win32_Directory.Name='$ordner'" -Name uncompress 

Da WMI grundsätzlich Remoting-fähig ist, kann man über den WMI-Pfad die Aktion auch auf einem entfernten System ausführen, sofern man dort die Rechte hat:

Invoke-WmiMethod -Path 
"\\Rechnername\root\cimv2:Win32_Directory.Name='$ordner'" -Name compress

Es folgt ein Beispiel-Skript, das einen Ordner anlegt (wenn noch nicht vorhanden) und komprimiert (wenn noch nicht komprimiert):

# Pfad
$ordner = "c:\temp\komprimierterOrdner"
"Anlegen eines komprimierten Ordners: $ordner"
# Ordner anlegen
if (-not (Test-Path $ordner)) {
"Ordner existiert nicht und wird angelegt..."
md $ordner
"OK"
}
else
{
"Ordner existiert schon"
}

# Ordner komprimieren
$ordnerobject = ([WMI] "Win32_Directory.Name='$ordner'")
if (-not ($ordnerobject.compressed))
{
"Ordner wird komprimiert..."
Invoke-WmiMethod -Path "Win32_Directory.Name='$ordner'" -Name compress
"OK"
}
else
{
"Ordner ist schon komprimiert"
} ()