Verification: a143cc29221c9be0

Not a zip archive php

Not a zip archive php

Как создать ZIP архив в PowerShell с помощью Compress-Archive?

Команда Compress-Archive имеет следующий синтаксис:


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

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

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

Чтобы заархивировать один файл, выполните:

Compress-Archive -Path "C:\Logs\WindowsUpdate.log" -DestinationPath C:\Archive\updatelog.zip -CompressionLevel Optimal

powershell архивация zip файлов с помощью командлета Compress-Archive
Можно заархивировать все содержимое нескольких каталогов (все файлы и подкаталоги):

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

Чтобы добавить в архив несколько файлов или папок, их имена нужно разделить запятыми.

Можно добавить в ZIP архив только файлы с определенной маской. Например, следующая команда запакует только файлы с расширением *.txt.

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

С помощью Get-ChildItem можно использовать более сложные фильтры. Например, следующий скрипт позволит найти на диске топ 10 самых больших файлов с расширением *.docx или *.xlsx и добавит их в архив:

Get-ChildItem c:\docs -Include *.xlsx –Recurse| sort -descending -property length | select -first 10 |Compress-Archive -DestinationPath C:\temp\officefiles.zip

Чтобы добавить в существующий zip архив новые файлы, используйте ключ Update:

Compress-Archive -Path C:\Logs\,C:\logs2\ –Update -DestinationPath C:\Archive\logs-txt.zip

Примечание. Т.к. модуль Microsoft.PowerShell.Archive использует вызовы класса System.IO.Compression.ZipArchive, не получится сжать файл, размером больше 2 Гб. При попытке сжать файл большего размера появится ошибка:

Ошибка создания архива 2 Гб

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 архив в PowerShell с Expand-Archive?

Для разархивирования ZIP файлов можно использовать командлет ExpandArchive.
Синтаксис командлета аналогичный:

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

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

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

Expand-Archive

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

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

В более сложных случаях для выполнения архивации в ваших PowerShell скриптах нужно использовать сторонние утилиты. Например, 7zip или модуль 7Zip4Powershell. Например, следующая команда позволит распаковать zip файл, защищенный паролем:

Install-Module -Name 7Zip4Powershell
Expand-7Zip -ArchiveFileName C:\PS\Logs.zip -Password "P@$$dr0w" -TargetPath C:\Temp\NewLogs