Kako stvoriti ZIP arhivu pomoću programa PowerShell

PowerShell 5.0 (uključen u sustav Windows Management Framework 5.0, koji je prema zadanim postavkama uključen u sustav Windows 10) ima zaseban modul Microsoft.PowerShell.Archive, koji vam omogućuje stvaranje i ekstrahiranje ZIP arhiva iz naredbenog retka ili unutar PowerShell skripte. Popis raspoloživih cmdleta u modulu Microsoft.PowerShell.Archive (C: \ Windows \ System32 \ WindowsPowerShell \ v1.0 \ Modules \ Microsoft.PowerShell.Archive) može se dobiti pomoću Get-Command.

Get-Command -Module Microsoft.PowerShell.Archive | Format-Table -AutoSize;

Izvor verzije Naziva CommandType
- --             -- -
Funkcija Compress-Archive 1.0.0.0 Microsoft.PowerShell.Archive
Funkcija Proširi-Arhiva 1.0.0.0 Microsoft.PowerShell.Archive

Kao što vidimo, na raspolaganju su dva cmdleta čija imena govore sama za sebe:

  • Stisni arhivu
  • Proširi arhivu

Pogledajmo primjere korištenja tih cmdleta za stvaranje / raspakiranje ZIP arhiva iz određenih datoteka ili direktorija.

Format naredbe Stisni arhivu sljedeće:

Compress-Archive [-Path] String [] [-DestinationPath] string [-CompressionLevel String] [-Ažuriranje]

U parametru put specificiraju se izvorne datoteke za pakiranje, -DestinationPath -mjesto stvorene arhivske datoteke, CompressionLevel - nivo kompresije (bez kompresije, optimalno ili najbrže). parametar -ažuriranje omogućava vam dodavanje / ažuriranje datoteka u postojećoj ZIP arhivi. S ključem -sila, ako arhiva s navedenim imenom već postoji, bit će prebrisana.

vijeće. Razina kompresije NoCompression, u pravilu, treba koristiti za kombiniranje već komprimiranih datoteka (jpg, msi, mp3, itd.) U jednu arhivsku datoteku kako sustav ne bi gubio vrijeme pokušavajući ih komprimirati..

Primjer naredbe za komprimiranje jedne datoteke:

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


Stisnite cijeli sadržaj mape:

Sažimanje-Arhiva-Put C: \ Dnevnici \ -Destinacijski put C: \ Arhiva \ logs-all.zip -Kompresija Nivo Optimalno

Datoteke možete komprimirati određenom maskom. Na primjer, morate spakirati samo datoteke s nastavkom * .txt.

Compress-Archive -Path C: \ Logs \ *. Txt -DestinationPath C: \ Archive \ logs-txt.zip -CompressionLevel Najbrži

primjedba. jer modul Microsoft.PowerShell.Archive koristi pozive u klasu System.IO.Compression.ZipArchive, neće biti moguće komprimirati datoteku veću od 2 GB. Ako pokušate komprimirati veću datoteku, pojavit će se pogreška
Iznimka koja poziva "Write" s argumentima (argumentima) "3": "Stream je bio predug."
Na C: \ Windows \ system32 \ WindowsPowerShell \ v1.0 \ Modules \ Microsoft.PowerShell.Archive \ Microsoft.PowerShell.Archive.psm1: 805
char: 29
+... $ destStream.Write ($ međuspremnik, 0, $ brojOfBytesRead)
+                         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ KategorijaInfo: Nije specificirano: (:) [], MethodInvocationException
+ PotpunoKvalificiraniErrorId: IOException

Da biste raspakirali ZIP arhivu, koristite cmdlet Proširi arhivu.
Format naredbe:

Proširi-Archive [-Path] string [-DestinationPath] string [-Force] [-Confirm]

Na primjer, raspakujte prethodno stvorenu zip arhivu prepisivanjem datoteka u ciljanom direktoriju:

Proširi-Arhiva-Put C: \ Scripts \ test1.zip -DestinationPath c: \ skripte -Force

Od nedostataka modula za arhiviranje ove verzije, valja napomenuti:

  • Nije moguće pregledati arhivski sadržaj bez raspakiranja
  • Dio datoteka ne može se izvaditi iz arhive (samo potpuna dekompresija)
  • Ne možete koristiti druge arhivske formate osim zip

U prethodnim verzijama Poweshell-a možete koristiti klasu NET Framework 4.5 za komprimiranje / dekomprimiranje ZIP datoteka sažeta. Format korištenja klase je sljedeći.

Spakujemo datoteke u arhivu:

Add-Type -Sastavljanje "system.io.compression.filesystem"
$ src = "C: \ Zapisnici"
$ dst = "C: \ Arhiva \ test.zip"
[io.compression.zipfile] :: CreateFromDirectory ($ src, $ dst)

Možete raspakirati ZIP arhivu na sljedeći način:

Add-Type -Sastavljanje "system.io.compression.filesystem"
$ src = "C: \ Arhiva \ test.zip"
$ dst = "C: \ Zapisnici \ Arhiva"
[io.compression.zipfile] :: ExtractToDirectory ($ src, $ dst)