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"
}
()