Работа с архивами в Powershell
Когда-то давно приходилось автоматизировать работу с архивированием и разархивированием файлов через Powershell. Тогда я для этого использовал консольную версию 7zip – ложил его в определённое место и в скрипте вызывал его оттуда. Сейчас вновь потребовалось поработать с архивами, но, как оказалось, сейчас всё намного проще.
Начиная с версии .NET Framework 4.5 появился встроенный класс ZipFile, благодаря которому архивировать и разархивировать файлы одно удовольствие.
Для работы с возможностями этого класса прежде всего необходимо загрузить соответствующую сборку:
Add-Type -AssemblyName "System.IO.Compression.FileSystem"
Для того, чтобы заархивировать каталог с файлами нужно вызвать метод CreateFromDirectory, ему передать путь к каталогу, который будет архивироваться и путь к будущему архиву:
# Каталог, который будем архивировать $Source = 'C:\test' # Путь, куда положить готовый архив $ArchiveFileName = 'C:\archive.zip' # Архивируем [IO.Compression.ZipFile]::CreateFromDirectory($Source, $ArchiveFileName)
Для разархивирования следует вызвать метод ExtractToDirectory, в который нужно передать разархивируемый файл, и путь к каталогу, в который нужно извлечь файлы:
# Путь к архиву $ArchiveFileName = 'C:\archive.zip' # Путь, куда разархивировать $ExtractPath = 'C:\unzip' # Разархивируем [IO.Compression.ZipFile]::ExtractToDirectory($ArchiveFileName, $ExtractPath)
Это только для Win8 и более поздних.