Ako vytvoriť archív ZIP pomocou PowerShell

PowerShell 5.0 (súčasťou systému Windows Management Framework 5.0, ktorý je štandardne zahrnutý v systéme Windows 10) má samostatný modul Microsoft.PowerShell.Archive, ktorý umožňuje vytvárať a extrahovať archívy ZIP z príkazového riadku alebo z skriptov PowerShell. Zoznam dostupných rutín v module Microsoft.PowerShell.Archive (C: \ Windows \ System32 \ WindowsPowerShell \ v1.0 \ Moduules \ Microsoft.PowerShell.Archive) je možné získať pomocou príkazu Get-Command.

Get-Command - Modul Microsoft.PowerShell.Archive | Tabuľka formátov -AutoSize;

Názov CommandType Verzia Zdroj
- --             -- -
Funkcia Compress-Archive 1.0.0.0 Microsoft.PowerShell.Archive
Funkcia Rozbaliť-archivovať 1.0.0.0 Microsoft.PowerShell.Archive

Ako vidíme, sú k dispozícii dva rutiny cmdlet, ktorých mená hovoria samy za seba:

  • Archív komprimácie
  • Rozbaľte Archív

Pozrime sa na príklady použitia týchto rutín na vytváranie / rozbaľovanie ZIP archívov z určených súborov alebo adresárov.

Formát príkazu Archív komprimácie nasledujúce:

Komprimovaný archív [-Path] String [] [-DestinationPath] String [-ompressionLevel String] [-Update]

V parametri cesta sú špecifikované zdrojové súbory, ktoré sa majú zabaliť, -DestinationPath -umiestnenie vytvoreného archívneho súboru, CompressionLevel - úroveň kompresie (NoCompression, Optimal alebo Fastest). parameter -aktualizovať umožňuje pridávať / aktualizovať súbory do existujúceho archívu ZIP. S kľúčom -sila, ak archív so zadaným názvom už existuje, bude prepísaný.

rada. Úroveň komprimácie programu NoCompression by sa mala spravidla používať na kombinovanie už komprimovaných súborov (jpg, msi, mp3 atď.) Do jedného archívneho súboru, aby systém nestrácal čas pokusom o ich komprimáciu..

Príklad príkazu na kompresiu jedného súboru:

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


Komprimujte celý obsah adresára:

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

Súbory môžete komprimovať pomocou špecifickej masky. Napríklad musíte zabaliť iba súbory s príponou * .txt.

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

poznámka. pretože modul Microsoft.PowerShell.Archive používa volania do triedy System.IO.Compression.ZipArchive, nebude možné komprimovať súbor väčší ako 2 GB. Ak sa pokúsite skomprimovať väčší súbor, zobrazí sa chyba
Výnimka nazývajúca „Write“ s argumentom „3“: „Stream bol príliš dlhý.“
V C: \ Windows \ system32 \ WindowsPowerShell \ v1.0 \ Moduules \ Microsoft.PowerShell.Archive \ Microsoft.PowerShell.Archive.psm1: 805
char: 29
+... $ destStream.Write ($ buffer, 0, $ numberOfBytesRead)
+                         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo: Nešpecifikované: (:) [], MethodInvocationException
+ FullyQualifiedErrorId: IOException

Na rozbalenie ZIP archívu použite cmdlet Rozbaľte Archív.
Formát príkazu:

Rozbaliť-Archív [-Path] String [-DestinationPath] String [-Force] [-Potvrdiť]

Napríklad na rozbalenie predtým vytvoreného archívu ZIP prepísaním súborov v cieľovom adresári:

Rozbaliť-Archív-Cesta C: \ Scripts \ test1.zip -DestinationPath c: \ scripts -Force

Z nedostatkov archivačného modulu tejto verzie je potrebné poznamenať:

  • Bez rozbalenia nie je možné zobraziť obsah archívu
  • Časť súborov sa nedá extrahovať z archívu (iba úplná dekompresia)
  • Nemôžete použiť iné archívne formáty ako ZIP

V predchádzajúcich verziách Poweshell môžete na kompresiu / dekompresiu súborov zip použiť triedu NET Framework 4.5 .zip archívu. Formát pre použitie triedy je nasledujúci.

Zabalíme súbory do archívu:

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

ZIP archív môžete rozbaliť nasledovne:

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