Войти

Login to your account

Username *
Password *
Remember Me
  • Статьи
  • Администрирование
  • Windows
  • Как создать ZIP архив с помощью PowerShell

Как создать 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\Modules\Microsoft.PowerShell.Archive) можно получить с помощью Get-Command.

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

eMicrosoft.PowerShell.Archive

Как мы видим, доступно два командлета, названия которых говорят сами за себя:

  • Compress-Archive
  • Expand-Archive

Рассмотрим примеры использования данных командлетов для создания/распаковки ZIP архивов из указанных файлов или каталогов.

Формат команды Compress-Archive следующий:
Compress-Archive [-Path] String[] [-DestinationPath] String  [-CompressionLevel String ] [-Update]

В параметре Path задаются исходные файлы, которые нужно запаковать, —DestinationPath –местоположение создаваемого файла с архивом, CompressionLevel – уровень сжатия (NoCompression, Optimal или Fastest). Параметр –Update позволяет добавить/обновить файлы в уже существующем ZIP архиве. С ключом –Force, если архив с указанным именем уже существует, он будет перезаписан.

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

Пример команды для сжатия одного файла:

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

Сожмем все содержимое каталога:

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 Гб. При попытке сжать файл большего размера появится ошибка
error 2gb archive

Exception calling "Write" with "3" argument(s): "Stream was too long."
At  C:\Windows\system32\WindowsPowerShell\v1.0\Modules\Microsoft.PowerShell.Archive\Microsoft.PowerShell.Archive.psm1:805
char:29
+ ...                     $destStream.Write($buffer, 0, $numberOfBytesRead)
+                         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
+ FullyQualifiedErrorId : IOException

Чтобы распаковать ZIP архив, воспользуемся командлетом Expand-Archive.
Формат команды:

Expand-Archive [-Path] String [-DestinationPath] String [-Force]  [-Confirm]

Например, чтобы распаковать созданный нами ранее zip-архив, перезаписав файлы в целевом каталоге:

Expand-Archive -Path C:\Scripts\test1.zip  -DestinationPath c:\scripts -Force
Expand Archive

Из недостатков модуля архивирования этой версии стоит отметить:

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

В предыдущих версиях Poweshell для сжатия/распаковки zip-файлов можно использовать класс NET Framework 4.5 ZipFile. Формат использования класса следующий.

Упаковываем файлы в архив:

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

Распаковать ZIP архив можно так:

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

Метки: Power Shell