Створення ZIP архіву за допомогою PowerShell.
Зазвичай при необхідності автоматизувати створення архівних копій я використовую утиліту 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.
.