Гид по технологиям

Как архивировать и распаковать файлы в PowerShell

5 min read Sysadmin Обновлено 26 Dec 2025
Как архивировать и распаковать файлы в PowerShell
Как архивировать и распаковать файлы в PowerShell

Иконка PowerShell на экране компьютера

Краткое введение

ZIP — это контейнерный формат, который уменьшает объём файлов за счёт сжатия, упрощает обмен и хранение. В PowerShell есть два основных cmdlet для работы с ZIP: Compress-Archive (создание/обновление) и Expand-Archive (распаковка). Ниже — понятные примеры, советы по шаблонам использования, варианты для разных ролей и рекомендации по безопасности.

Важно: Compress-Archive не поддерживает установку пароля/шифрования архивов. Для шифрования используйте внешние утилиты (7‑Zip, OpenSSL) или встроенные механизмы операционной системы.

Основы: как создать ZIP (Compress-Archive)

Откройте PowerShell (Пуск → PowerShell) и выполните одну из команд ниже. Везде заменяйте пути на свои.

  • Если нужно архивировать отдельные файлы:
Compress-Archive -LiteralPath  -DestinationPath 

Пример (несколько файлов через запятую):

Compress-Archive -LiteralPath C:\Users\alex\file1.txt, C:\Users\alex\file2.log -DestinationPath C:\Backups\archive.zip

Примечание: используйте кавычки вокруг пути, только если в нём есть пробелы.

Сжатие нескольких файлов в ZIP через PowerShell

  • Если нужно архивировать всю папку с её содержимым (включая подпапки):
Compress-Archive -LiteralPath  -DestinationPath 

Пример:

Compress-Archive -LiteralPath C:\Projects\MySite -DestinationPath C:\Backups\mysite.zip

Создание архива из папки со всем содержимым

  • Использование шаблонов (wildcards):

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

Пример — архивировать только содержимое корневой папки, но не саму папку:

Compress-Archive -Path C:\path\to\folder\* -DestinationPath C:\path\to\archive.zip

Архивация только содержимого папки, без самой папки

Архивировать только файлы определённого типа:

Compress-Archive -Path C:\path\to\folder\*.jpg -DestinationPath C:\path\to\images.zip

Архивация только файлов определённого типа (.jpg)

Если нужно взять все файлы (включая вложенные) в корне и подпапках, используйте:

Compress-Archive -Path C:\path\to\folder\*.* -DestinationPath C:\path\to\archive.zip

Архивация файлов из корня и подпапок с помощью *.*

  • Обновление существующего архива

Чтобы добавить новые файлы или заменить старые с теми же именами в существующем ZIP, используйте параметр -Update:

Compress-Archive -Path C:\path\to\files -Update -DestinationPath C:\path\to\archive.zip

Обновление существующего ZIP‑файла параметром -Update

Распаковка ZIP (Expand-Archive)

Распаковка проще: указываете источник и папку назначения.

Expand-Archive -LiteralPath  -DestinationPath 

Пример:

Expand-Archive -LiteralPath C:\Backups\archive.zip -DestinationPath C:\Temp\ArchiveContent

Распаковка архива с помощью Expand-Archive

Если не указывать -DestinationPath, PowerShell создаст папку с именем архива в текущем каталоге и распакует туда содержимое. Если папка назначения уже существует, командлет вызовет ошибку — чтобы перезаписать файлы, используйте -Force.

Внимание: параметр -Force перезапишет файлы безвозвратно. Применяйте, только если старые данные вам не нужны.

Если не указывать -DestinationPath, PowerShell создаёт папку из имени архива

Разница между -Path и -LiteralPath

  • -LiteralPath воспринимает путь буквально (не интерпретирует спецсимволы).
  • -Path позволяет использовать шаблоны (wildcards) и расширения.

Используйте -LiteralPath для чётких путей. Если нужен поиск по маске — используйте -Path.

Когда встроенных команд недостаточно: альтернативы

  • 7‑Zip (7z.exe) — поддерживает шифрование AES-256, самораспаковывающиеся архивы, более плотное сжатие. Подходит для резервных копий с паролем.
  • .NET System.IO.Compression.ZipFile — для сценариев в скриптах, где нужна более тонкая программная обработка.
  • Комбинация PowerShell + 7‑Zip через Start-Process или прямой вызов 7z.exe.

Пример вызова 7‑Zip для шифрования (общее направление, параметры зависят от версии 7z):

& 'C:\Program Files\7-Zip\7z.exe' a -tzip C:\Backups\secure.zip C:\Data\* -pYourPassword -mem=AES256

Руководство по безопасности и конфиденциальности

  • Compress-Archive не шифрует архивы и не поддерживает пароли — не используйте его для секретных данных.
  • Для данных пользователей и персональных данных соблюдайте локальное законодательство (например, требования по хранению/удалению). Удаляйте временные файлы после обработки.
  • Ограничьте права на папки с архивами (NTFS ACL), чтобы предотвратить несанкционированный доступ.

Проверка и отладка: типичные ошибки и решения

  • Ошибка: «DestinationPath already exists» при распаковке — используйте -Force или удалите папку вручную.
  • Ошибка: путь содержит спецсимволы — используйте -LiteralPath и экранируйте символы.
  • Проблема: архив не содержит ожидаемых файлов — проверьте, не использовали ли вы -Path с шаблоном, который исключил нужные файлы.
  • Если Compress-Archive пропускает скрытые/системные файлы — убедитесь, что у процесса есть права на чтение таких файлов.

Краткий сценарий отладки:

  1. Выполните Get-ChildItem на источнике, чтобы убедиться, что файлы видимы PowerShell.
  2. Попробуйте создать архив с небольшой тестовой папки.
  3. Распакуйте тестовый архив в новую пустую папку.

Ментальные модели и лучшие практики

  • Модель «контейнер vs содержимое»: решите, нужно ли вам включать в архив саму корневую папку или только её содержимое — это влияет на команду (-Path с * для содержимого).
  • Модель «безопасность vs удобство»: встроенные cmdlet удобны, но не шифруют; внешние инструменты дают безопасность, но требуют установки.
  • Используйте соглашения по именам архивов: yyyy-MM-dd_project_task.zip для упрощённого поиска и автоматизации.

Чеклисты по ролям

Администратор:

  • Проверить права доступа на папки архивации.
  • Настроить задачи в Планировщике Windows для регулярных резервных копий.
  • Использовать 7‑Zip с AES, если требуется шифрование.

Разработчик/автоматизация:

  • Использовать -LiteralPath для стабильности путей.
  • Логировать результаты команд (stdout/stderr) в файл.
  • Добавить проверку хэшей (Get-FileHash) до и после архивации.

Конечный пользователь:

  • Дважды проверить имя и местоположение DestinationPath.
  • Не использовать -Force, если не уверен в удалении старых данных.
  • При передаче архива по сети — использовать защищённые каналы (SFTP, HTTPS).

Мини‑методология: рабочий процесс архивации

  1. Подготовка: собрать список файлов (Get-ChildItem), проверить доступность.
  2. Создание: Compress-Archive с явным DestinationPath и временной папкой.
  3. Валидация: распаковать в тестовую папку и сравнить контрольные суммы (Get-FileHash).
  4. Доставка: переместить архив в место хранения/репозиторий.
  5. Очистка: удалить временные файлы и зафиксировать лог.

Decision tree (простая логика выбора)

flowchart TD
  A[Нужно архивировать?] --> B{Требуется шифрование?}
  B -- Да --> C[Использовать 7-Zip или средство с поддержкой AES]
  B -- Нет --> D{Нужна ли маска/фильтр?}
  D -- Да --> E[Compress-Archive -Path с шаблоном]
  D -- Нет --> F[Compress-Archive -LiteralPath]
  E --> G[Проверка архива]
  F --> G
  C --> G
  G --> H[Расположение хранения и права]

Критерии приёмки

  • ZIP создаётся без ошибок и содержит ожидаемые файлы.
  • При распаковке файлы восстанавливаются с теми же именами и целостностью (проверка контрольной суммы).
  • Конфиденциальные данные защищены: либо зашифрованы, либо хранятся в безопасном месте с ограниченным доступом.

Примеры тест-кейсов

  1. Создать архив из папки с поддиректориями. Ожидаемый результат: все файлы и подпапки присутствуют в архиве.
  2. Создать архив с шаблоном *.jpg. Ожидаемый результат: только .jpg файлы в архиве.
  3. Распаковать в существующую папку без -Force. Ожидаемый результат: PowerShell возвращает ошибку.
  4. Обновить архив с -Update и заменить файл с тем же именем. Ожидаемый результат: версия файла в архиве обновлена.

Короткое резюме

PowerShell предоставляет простые и надёжные способы создать и распаковать ZIP-файлы с помощью Compress-Archive и Expand-Archive. Для продвинутых сценариев — фильтрации, шифрования или интеграции в сложные пайплайны — комбинируйте PowerShell с 7‑Zip или .NET API. Всегда проверяйте права доступа и целостность данных после операций с архивами.

Важно: если вы работаете с персональными или чувствительными данными, применяйте шифрование и ограничивайте доступ к файлам.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Безопасный и эффективный умный дом
Умный дом

Безопасный и эффективный умный дом

Скрыть или очистить список недавних файлов в Photoshop
Photoshop

Скрыть или очистить список недавних файлов в Photoshop

Писать на iPad с Apple Pencil — как использовать Scribble
iPad

Писать на iPad с Apple Pencil — как использовать Scribble

Отключение уведомлений в Сообщениях на Apple‑устройствах
Инструкции

Отключение уведомлений в Сообщениях на Apple‑устройствах

Что такое Freevee — бесплатный стриминг от Amazon
Стриминг

Что такое Freevee — бесплатный стриминг от Amazon

Как подключить Wi‑Fi на Ubuntu Server
Linux

Как подключить Wi‑Fi на Ubuntu Server