Командлет сжатия и распаковки архивов впервые появились в PowerShell 5 и давали возможность легко сжимать и распаковывать архивы с помощью командной строки. Пользуясь командлетами вы сэкономите время и место на жестком диске при упаковке, например, лог-файлов или папок.
Вы спросите, а зачем мне это знать, когда проще щелкнуть правой кнопкой мыши по файлу или папке и выбрать пункт меню «Добавить в архив…». Многие сторонние утилиты, такие как 7-zip поддерживают функцию архивирования с помощью командной строки. Однако, командлеты очень полезны, если вы хотите автоматизировать задачу с помощью PowerShell.
Сама операция архивирования и распаковки в PowerShell выполняется с помощью двух командлетов:
- Compress-Archive – используется для сжатия файлов и папок
- Expand-Archive – используется для извлечения (распаковки) сжатых архивов
Сжимаемфайлыв zip архив
Параметр compressionlevel поддерживает несколько режимов компрессии:
- Fastest — самый быстрый метод сжатия (сжатые файлы, папки имеют наибольший размер)
- NoCompression — без сжатия (файлы, папки будут объединены в одни файл архива без сжатия)
- Optimal – самый медленный метод сжатия (сжатые файлы, папки имеют наименьший размер)
В приведенном нами примере создадим архив «logs.zip» папки логов веб-сервера IIS.
compress-archive -path 'c:\wwwroot\logs' -destinationpath '.\logs.zip' -compressionlevel optimal
Вместо параметра -Path, вы можете подставить командлет –LiteralPath, который отвечает за то, что подстановочные символы не будут интерпретированы в PowerShell. Параметр –Update командлета Compress-Archive заменяет старую версию файла на новый.
compress-archive -path “c:\wwwroot\logs\latest” -destinationpath “c:\wwwroot\logs\logs.zip” -update -compressionlevel optimal
Ввод параметров можно и пропустить. Тогда команда архивирования примет вид:
compress-archive test.txt test.zip
Распаковываем архив
Распакуем архив iislogs.zip в новую папку текущей директории
expand-archive -path 'c:\users\john\desktop\iislogs.zip' -destinationpath '.\unzipped'
Обратите внимание, что, если пропустить параметр –DestinationPath, PowerShell автоматически создаст новую папку с таким же именем, как и имя архива. В приведенном нами примере новая папка получит имя «iislogs».