Как да създадете ZIP архив с помощта на PowerShell

PowerShell 5.0 (включен в Windows Management Framework 5.0, който по подразбиране е включен в Windows 10) има отделен модул Microsoft.PowerShell.Archive, което ви позволява да създавате и извличате ZIP архиви от командния ред или от скриптове на PowerShell. Списъкът на наличните командлети в модула Microsoft.PowerShell.Archive (C: \ Windows \ System32 \ WindowsPowerShell \ v1.0 \ Модули \ Microsoft.PowerShell.Archive) може да бъде получен чрез Get-Command.

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

Източник на версия на име на CommandType Име
- --             -- -
Функция Compress-Archive 1.0.0.0 Microsoft.PowerShell.Archive
Функция Разширяване-Архив 1.0.0.0 Microsoft.PowerShell.Archive

Както виждаме, са налични два командлета, чиито имена говорят сами за себе си:

  • Компресиране на архив
  • Разширяване на архива

Нека разгледаме примери за използването на тези командлети за създаване / разархивиране на ZIP архиви от определени файлове или директории.

Формат на командите Компресиране на архив следното:

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

В параметър път посочват се изходните файлове, които ще бъдат пакетирани, -DestinationPath -местоположение на създадения архивен файл, CompressionLevel - ниво на компресия (NoCompression, Optimal или Fastest). параметър -Актуализация ви позволява да добавяте / актуализирате файлове в съществуващ ZIP архив. С ключ -сила, ако архивът с посоченото име вече съществува, той ще бъде презаписан.

съвет. Нивото на компресия на NoCompression, като правило, трябва да се използва за комбиниране на вече компресирани файлове (jpg, msi, mp3 и т.н.) в един архивен файл, така че системата да не губи време при опитите си да ги компресира.

Примерна команда за компресиране на един файл:

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


Компресирайте цялото съдържание на директорията:

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

Можете да компресирате файлове с конкретна маска. Например, трябва да пакетирате само файлове с разширението * .txt.

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

забележка. защото модулът Microsoft.PowerShell.Archive използва обаждания към класа System.IO.Compression.ZipArchive, няма да е възможно компресиране на файл, по-голям от 2 GB. Ако се опитате да компресирате по-голям файл, ще се появи грешка
Изключение извиква „Напиши“ с аргумент (и) „3“: „Потокът беше твърде дълъг“.
В C: \ Windows \ system32 \ WindowsPowerShell \ v1.0 \ Модули \ Microsoft.PowerShell.Archive \ Microsoft.PowerShell.Archive.psm1: 805
char: 29
+... $ destStream.Write ($ буфер, 0, $ бройOfBytesRead)
+                         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo: NotSpecified: (:) [], MethodInvocationException
+ FullyQualifiedErrorId: IOException

За да разархивирате ZIP архива, използвайте командлета Разширяване на архива.
Формат на командата:

Разширяване-Архив [-Path] Низ [-DestinationPath] String [-Force] [-Confirm]

Например, за да разархивирате създадения по-рано zip архив, като презапишете файловете в целевата директория:

Разширяване-Архив-Път C: \ Scripts \ test1.zip -DestinationPath c: \ scriptpts -Force

От недостатъците на модула за архивиране на тази версия, заслужава да се отбележи:

  • Не може да се гледа архивното съдържание, без да го разопаковате
  • Част от файловете не могат да бъдат извлечени от архив (само за пълно декомпресиране)
  • Не можете да използвате други архивни формати освен zip

В предишните версии на Poweshell можете да използвате клас NET Framework 4.5 за компресиране / декомпресиране на ZIP файлове ZipFile. Форматът за използване на класа е следният.

Ние пакетираме файловете в архива:

Add-Type -Сглобяване „system.io.compression.filesystem“
$ src = „C: \ Логове“
$ dst = "C: \ Архив \ test.zip"
[io.compression.zipfile] :: CreateFromDirectory ($ src, $ dst)

Можете да разархивирате ZIP архива, както следва:

Add-Type -Сглобяване „system.io.compression.filesystem“
$ src = "C: \ Архив \ test.zip"
$ dst = "C: \ Логове \ Архив"
[io.compression.zipfile] :: ExtractToDirectory ($ src, $ dst)