Jak vytvořit ZIP archiv pomocí PowerShell

PowerShell 5.0 (součástí Windows Management Framework 5.0, který je standardně součástí Windows 10) má samostatný modul Microsoft.PowerShell.Archive, což umožňuje vytvářet a extrahovat ZIP archivy z příkazového řádku nebo uvnitř skriptů PowerShell. Seznam dostupných rutin v modulu Microsoft.PowerShell.Archive (C: \ Windows \ System32 \ WindowsPowerShell \ v1.0 \ Moduules \ Microsoft.PowerShell.Archive) lze získat pomocí příkazu Get-Command.

Get-Command - Modul Microsoft.PowerShell.Archive | Tabulka formátů -AutoSize;

CommandType Název Verze Zdroj
- --             -- -
Funkce Compress-Archive 1.0.0.0 Microsoft.PowerShell.Archive
Funkce Rozbalit-archivovat 1.0.0.0 Microsoft.PowerShell.Archive

Jak vidíme, jsou k dispozici dva rutiny, jejichž jména hovoří sama za sebe:

  • Archiv komprese
  • Rozbalte archiv

Podívejme se na příklady použití těchto rutin k vytvoření / rozbalení ZIP archivů z určených souborů nebo adresářů.

Formát příkazu Archiv komprese následující:

Compress-Archive [-Path] String [] [-DestinationPath] String [-CompressionLevel String] [-Update]

V parametru Cesta jsou určeny zdrojové soubory, které mají být zabaleny, -DestinationPath -umístění vytvořeného archivního souboru, CompressionLevel - úroveň komprese (NoCompression, Optimal nebo Fastest). Parametr -Aktualizace umožňuje přidávat / aktualizovat soubory do existujícího ZIP archivu. S klíčem -Síla, pokud archiv se zadaným názvem již existuje, bude přepsán.

Tip. Úroveň komprese NoCompression by se měla zpravidla použít ke zkombinování již komprimovaných souborů (jpg, msi, mp3 atd.) Do jediného archivního souboru, aby systém neztrácel čas pokusem o komprimaci.

Příklad příkazu ke kompresi jednoho souboru:

Compress-Archive -Path C: \ Logs \ Update.log -DestinationPath C: \ Archive \ logs.zip -CompressionLevel Optimal


Komprimujte celý obsah adresáře:

Compress-Archive -Path C: \ Logs \ -DestinationPath C: \ Archive \ logs-all.zip -CompressionLevel Optimal

Soubory můžete komprimovat pomocí specifické masky. Například musíte zabalit pouze soubory s příponou * .txt.

Compress-Archive -Path C: \ Logs \ *. Txt -DestinationPath C: \ Archive \ logs-txt.zip -CompressionLevel Fastest nejrychlejší

Poznámka:. Protože modul Microsoft.PowerShell.Archive používá volání třídy System.IO.Compression.ZipArchive, nebude možné komprimovat soubor větší než 2 GB. Pokud se pokusíte komprimovat větší soubor, objeví se chyba
Výjimka volající "Write" s argumenty "3": "Stream byl příliš dlouhý."
V C: \ Windows \ system32 \ WindowsPowerShell \ v1.0 \ Moduules \ Microsoft.PowerShell.Archive \ Microsoft.PowerShell.Archive.psm1: 805
char: 29
+... $ destStream.Write ($ buffer, 0, $ numberOfBytesRead)
+                         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo: Nespecifikováno: (:) [], MethodInvocationException
+ FullyQualifiedErrorId: IOException

Chcete-li rozbalit ZIP archiv, použijte cmdlet Rozbalte archiv.
Formát příkazu:

Rozbalit-archivovat [-Path] String [-DestinationPath] String [-Force] [-Confirm]

Například pro rozbalení dříve vytvořeného archivu ZIP přepsáním souborů v cílovém adresáři:

Rozbalit-Archiv-Cesta C: \ Scripts \ test1.zip -DestinationPath c: \ scripts -Force

Z nedostatků archivačního modulu této verze stojí za zmínku:

  • Nelze zobrazit obsah archivu bez rozbalení
  • Část souborů nelze extrahovat z archivu (pouze úplná dekomprese)
  • Nelze použít jiné archivní formáty než zip

V předchozích verzích Poweshell můžete ke komprimaci / dekomprimaci souborů ZIP použít třídu NET Framework 4.5 Zipfile. Formát pro použití třídy je následující.

Zabalíme soubory do archivu:

Add-Type -Assembly “system.io.compression.filesystem”
$ src = “C: \ Logs”
$ dst = “C: \ Archive \ test.zip”
[io.compression.zipfile] :: CreateFromDirectory ($ src, $ dst)

ZIP archiv můžete rozbalit následovně:

Add-Type -Assembly “system.io.compression.filesystem”
$ src = "C: \ Archive \ test.zip"
$ dst = "C: \ Logs \ Archve"
[io.compression.zipfile] :: ExtractToDirectory ($ src, $ dst)