Обычно при необходимости автоматизировать создание архивных копий я использую утилиту 7zip. Она бесплатна, удобна в использовании и имеет интерфейс командной строки, что позволяет использовать ее в скриптах. Однако установка стороннего софта на сервер не всегда возможна, поэтому при необходимости можно создавать zip архивы, используя встроенный в Windows функционал.
Для создания zip архива можно воспользоваться классом ZipFile, появившимся в .NET Framework 4.5. Этот класс не загружен по умолчанию, поэтому первое, что надо сделать — это загрузить недостающую сборку (assembly) командой:
Add-Type -Assembly ″system.io.compression.filesystem″
Загрузив сборку, можно приступать к архивации. Для этого используем статический метод CreateFromDirectory класса ZipFile. Для создания архива из директории этому методу необходимо в качестве аргументов передать исходную директорию и имя конечного zip-файла. Например:
$source = C:\Testzip\1
$destination = C:\Testzip\1.zip
[io.compression.zipfile]::CreateFromDirectory($source, $destination)
В методе CreateFromDirectory можно задать уровень сжатия:
• Optimal — оптимизация по уровню сжатия;
• Fastest — оптимизация по затрачиваемому времени;
• NoCompression — без сжатия.
А также можно указать, включать ли в архив базовый каталог или нет. Для примера еще раз создадим архив с уровнем сжатия Optimal и укажем не включать в него базовый каталог:
$level = [System.IO.Compression.CompressionLevel]::Optimal
$Include = $false
[io.compression.zipfile]::CreateFromDirectory($source, $destination, $level, $Include)
При создании архива надо помнить о том, что метод не умеет перезаписывать существующие файлы, и если в указанной директории уже есть zip-файл с таким именем — то он выдаст ошибку.
Операция, обратная архивации — разархивирование. Для этого используем метод ExtractToDirectory. Для работы ему нужно передать исходный zip-файл и директорию, в которую его надо распаковать. Для примера распакуем созданный ранее архив:
$source = ″C:\Testzip\1.zip″
$destination = ″C:\Testzip″
[io.compression.zipfile]::ExtractToDirectory($source, $destination)
На этом все, а более подробно о .Net классе ZipFile, его свойствах и методах можно узнать из библиотеки MSDN.
Отлично! А я постоянно мучился с 7zip. Ваш сайт постоянно выручает.