Zippen mit PowerShell 5.0

Der Dotnet-Doktor  –  9 Kommentare

In der neuen PowerShell liefert Microsoft endlich die Commandlets Compress-Archive und Expand-Archive.

Kaum zum glauben, dass Microsoft die PowerShell-Versionen 1 bis 4 ohne eigene Commandlets zum Erstellen von komprimierten Archivdateien ausgeliefert hat. Bisher musste der PowerShell-Nutzer dazu auf eine .NET-Klasse zurückgreifen:

$quelle = "t:\temp\Kundendaten"
$ziel = "t:\Kundendaten.zip"
Add-Type -assembly "system.io.compression.filesystem"
[System.IO.Compression.ZipFile]::CreateFromDirectory($quelle, $ziel)

Alternativ dazu gab es Commandlets in Erweiterungsbibliotheken aus der Community:

Nun in PowerShell 5.0 liefert Microsoft zwei Commandlets mit:

  • Compress-Archive
  • Expand-Archive

Compress-Archive erhält Eingabedateien über den ersten Parameter (-Path) oder den Inhalt der Pipeline:

Compress-Archive t:\Temp\KundenDaten -DestinationPath h:\KundenDaten.zip
dir t:\Temp\KundenDaten | Compress-Archive -dest t:\KundenDaten.zip

Expand-Archive funktioniert analog:

Expand-Archive t:\KundenDaten.zip t:\Temp\KundenDaten -Force
"t:\KundenDaten.zip" | Expand-Archive -DestinationPath
t:\Temp\KundenDaten -Force

Allerdings unterstützen diese beiden Commandlets nur ZIP-Dateien. Andere Formate werden abgelehnt (" .rar is not a supported archive file format. .zip is the only supported archive file format")

Bei Compress-Archive bestimmt die Einstellungen für CompressionLevel ("NoCompression", "Fastest" oder "Optimal") den Komprimierungsgrad. Das -Update-Flag aktualisiert bestehende Archive, indem es Dateien ergänzt beziehungsweise ältere Versionen überschreibt. Bei Expand-Archive erzwingt der Parameter -force , dass bestehende Dateien überschrieben werden, was sonst zu einem Fehler führt.