Windows kann eigentlich schon ziemlich lange mit ZIP-Archiven umgehen. Und auch die PowerShell kann das, also sowohl ZIP-Dateien erstellen, als auch sie entpacken. Das kann n√ľtzlich sein, wenn ihr z.B. mit einem PowerShell Skript mehrere Dateien zu einer ZIP-Datei zusammenfassen wollt - das erleichtert das wegkopieren. Oder vielleicht um eine per Skript aus dem Internet geladene ZIP-Datei zu extrahieren.

ūüé¨ Ich habe √ľbrigens auch ein Video zu dem Thema erstellt.

Komprimieren

Mit dem Cmdlet Compress-Archive könnt ihr ein ZIP-Archiv erstellen:

1
Compress-Archive -Path "MeineOriginalDatei.txt" -DestinationPath "MeineGezippteDatei.zip"

Kompressionslevel anpassen

Optional k√∂nnt ihr noch ein CompressionLevel angeben. Wenn ihr den Parameter nicht angebt, wird standardm√§√üig die Option “Optimal” gew√§hlt, die eigentlich schon bestm√∂glich komprimieren sollte. Das ben√∂tigt ein wenig mehr Rechenpower beim Packen und Entpacken, kann aber Speicherplatz sparen. Alternativ gibt es noch die Optionen “Fastest”, die ist schneller aber das resultierende Archiv ist dann gr√∂√üer und “NoCompression” - da wird dann gar nicht komprimiert, sondern nur zu einer ZIP-Datei zusammengefasst.

1
2
Compress-Archive -Path "MeineOriginalDatei.txt" -DestinationPath "MeineGezippteDatei-Fastest.zip" -CompressionLevel Fastest
Compress-Archive -Path "MeineOriginalDatei.txt" -DestinationPath "MeineGezippteDatei-NoCompression.zip" -CompressionLevel NoCompression

Mehrere Dateien zippen

Um mehrere Dateien zu zippen gibt es verschiedene Möglichkeiten:

  1. Ihr könnt einfach beim -Path Parameter mehrere Werte angeben und die mit einem Komma trennen.

    1
    
    Compress-Archive -Path "MeineOriginalDatei.txt","beispiel.bmp" -DestinationPath "MeineGezippteDatei2.zip"
    
  2. Oder ihr könnt auch einen ganzen Ordner angeben:

    1
    
    Compress-Archive -Path "C:\temp" -DestinationPath "MeineGezippteDatei3.zip"
    
  3. Oder mit Wildcards arbeiten:

    1
    
    Compress-Archive -Path "*.jpg" -DestinationPath "MeineGezippteDatei4.zip"
    
  4. Oder ihr √ľbergebt die Info welche Daten komprimiert werden sollen per Pipeline:

    1
    2
    3
    
    Get-ChildItem C:\temp |
        Where-Object {$_.LastWriteTime -ge "2024-06-01"} |
        Compress-Archive -Path "C:\temp" -DestinationPath "MeineGezippteDatei5.zip"
    

Bestehende ZIP-Dateien ergänzen

Um eine bereits bestehende ZIP-Datei zu erg√§nzen, k√∂nnt ihr den Parameter -Update angeben. Wenn im ZIP-Archiv schon eine Datei mit dem gleichen Namen vorhanden ist, wird sie ersetzt. Ansonsten wird die Datei einfach zus√§tzlich in das ZIP-Archiv hinzugef√ľgt.

1
Compress-Archive -Path "Hallo.docx" -DestinationPath "MeineGezippteDatei6.zip" -Update

Entpacken

Mit dem Cmdlet Expand-Archive könnt ihr ZIP-Dateien entpacken:

1
Expand-Archive -Path "MeineGezippteDatei6.zip"

Im Standard erzeugt das Cmdlet einen Unterordner im aktuellen Verzeichnis, der dem Namen der ZIP-Datei entspricht. Die Daten aus dem ZIP-Archiv landen dann in diesem neuen Ordner. Wenn ihr den Inhalt des Archivs aber woanders hin entpacken wollt, dann könnt ihr mit -DestinationPath einen Zielordner angeben.

1
Expand-Archive -Path "MeineGezippteDatei6.zip" -DestinationPath "MeinEntpackterOrdner"

Oder wenn ihr in den aktuellen Ordner entpacken wollt, dann k√∂nnt ihr auch einen Punkt als Parameterwert f√ľr -DestinationPath angeben:

1
Expand-Archive -Path "MeineGezippteDatei6.zip" -DestinationPath .

Schlusswort

Bei beiden Cmdlets gibt es noch ein paar mehr Parameter und Optionen. Schaut dazu am besten in die Dokumentation bei Microsoft zu den beiden Befehlen.

Au√üerdem: Auch wenn neuere Windows Versionen nativ im Explorer mit weiteren Archiv-Formaten wie .rar oder .7z umgehen k√∂nnen, kann die PowerShell das leider noch nicht. Falls ihr in einem Skript andere Archiv-Formate verwenden wollt, dann m√ľsst ihr auf Alternativen zur√ľckgreifen, wie z.B. die Command Line Version von 7-Zip oder das PowerShell Modul “7Zip4PowerShell”. Wobei ich keine Erfahrung mit dem Modul habe, Benutzung auf eigene Gefahr ūüėČ.