Compress-Archive

Создает сжатый ZIP-архив из указанных файлов и каталогов.

Синтаксис

Compress-Archive
        [-Path] <String[]>
        [-DestinationPath] <String>
        [-CompressionLevel <String>]
        [-PassThru]
        [-WhatIf]
        [-Confirm]
        [<CommonParameters>]
Compress-Archive
        [-Path] <String[]>
        [-DestinationPath] <String>
        [-CompressionLevel <String>]
        -Update
        [-PassThru]
        [-WhatIf]
        [-Confirm]
        [<CommonParameters>]
Compress-Archive
        [-Path] <String[]>
        [-DestinationPath] <String>
        [-CompressionLevel <String>]
        -Force
        [-PassThru]
        [-WhatIf]
        [-Confirm]
        [<CommonParameters>]
Compress-Archive
        -LiteralPath <String[]>
        [-DestinationPath] <String>
        [-CompressionLevel <String>]
        -Update
        [-PassThru]
        [-WhatIf]
        [-Confirm]
        [<CommonParameters>]
Compress-Archive
        -LiteralPath <String[]>
        [-DestinationPath] <String>
        [-CompressionLevel <String>]
        -Force
        [-PassThru]
        [-WhatIf]
        [-Confirm]
        [<CommonParameters>]
Compress-Archive
        -LiteralPath <String[]>
        [-DestinationPath] <String>
        [-CompressionLevel <String>]
        [-PassThru]
        [-WhatIf]
        [-Confirm]
        [<CommonParameters>]

Описание

Командлет Compress-Archive создает сжатый или архивный файл из одного или нескольких указанных файлов или каталогов. Архивные пакеты нескольких файлов с необязательным сжатием в один zip-файл для упрощения распространения и хранения. Архивный файл можно сжать с помощью алгоритма сжатия, указанного параметром CompressionLevel .

Командлет Compress-Archive использует API System.IO.Compression.ZipArchive для сжатия файлов. API ограничивает максимальный размер файла до 2 ГБ. API .NET работает с файлами, которые соответствуют официальной спецификации формата ZIP-файла PKWARE Inc. Дополнительные сведения см. в разделе System.IO.Compression.ZipArchive.

Примечание.

Командлет Compress-Archive игнорирует скрытые файлы и папки при создании или обновлении архивного файла. На компьютерах, отличных от Windows, это включает файлы и папки с именем, начинающимся с символа периода (.).

Чтобы убедиться, что скрытые файлы и папки сжимаются в архив, используйте ВМЕСТО этого API .NET.

В некоторых примерах используется сложение для уменьшения длины строки примеров кода. Дополнительные сведения см. в about_Splatting.

Примеры

Пример 1. Сжатие файлов для создания архивного файла

В этом примере файлы сжимаются из разных каталогов и создаются архивные файлы. Подстановочный знак используется для получения всех файлов с определенным расширением. В архивном файле нет структуры каталогов, так как путь указывает только имена файлов.

$compress = @{
  Path = "C:\Reference\Draftdoc.docx", "C:\Reference\Images\*.vsd"
  CompressionLevel = "Fastest"
  DestinationPath = "C:\Archives\Draft.zip"
}
Compress-Archive @compress

Параметр Path принимает определенные имена файлов и имена файлов с подстановочными знаками. *.vsd Путь использует разделенный запятыми список для получения файлов из разных каталогов. Уровень сжатия является самым быстрым, чтобы сократить время обработки. Параметр DestinationPath указывает расположение файла Draft.zip . Файл Draft.zip содержит Draftdoc.docx и все файлы с расширением .vsd .

Пример 2. Сжатие файлов с помощью LiteralPath

В этом примере сжимаются определенные именованные файлы и создаются архивные файлы. В архивном файле нет структуры каталогов, так как путь указывает только имена файлов.

$compress = @{
LiteralPath= "C:\Reference\Draft Doc.docx", "C:\Reference\Images\diagram2.vsd"
CompressionLevel = "Fastest"
DestinationPath = "C:\Archives\Draft.zip"
}
Compress-Archive @compress

Абсолютный путь и имена файлов используются, так как параметр LiteralPath не принимает подстановочные знаки. Путь использует разделенный запятыми список для получения файлов из разных каталогов. Уровень сжатия является самым быстрым, чтобы сократить время обработки. Параметр DestinationPath указывает расположение файла Draft.zip . Файл Draft.zip содержит Draftdoc.docx только и diagram2.vsd.

Пример 3. Сжатие каталога, включающего корневой каталог

В этом примере сжимается каталог и создается архивный файл, включающий корневой каталог, а также все его файлы и вложенные каталоги. Архивный файл содержит структуру каталогов, так как Путь указывает корневой каталог.

Compress-Archive -Path C:\Reference -DestinationPath C:\Archives\Draft.zip

Compress-Archiveиспользует параметр Path для указания корневого каталогаC:\Reference. Параметр DestinationPath указывает расположение архивного файла. Архив Draft.zip включает корневой Reference каталог и все его файлы и вложенные каталоги.

Пример 4. Сжатие каталога, исключающего корневой каталог

В этом примере сжимается каталог и создается архивный файл, который исключает корневой каталог, так как Путь использует подстановочный знак звездочки (*). Архив содержит структуру каталогов, содержащую файлы и подкаталогы корневого каталога.

Compress-Archive -Path C:\Reference\* -DestinationPath C:\Archives\Draft.zip

Compress-Archiveиспользует параметр Path для указания корневого каталога C:\Reference со звездочкой (*) подстановочным знаком. Параметр DestinationPath указывает расположение архивного файла. Архив Draft.zip содержит файлы и вложенные каталоги корневого каталога. Корневой Reference каталог исключен из архива.

Пример 5. Сжатие только файлов в корневом каталоге

В этом примере сжимаются только файлы в корневом каталоге и создаются архивные файлы. В архиве нет структуры каталогов, так как сжимаются только файлы.

Compress-Archive -Path C:\Reference\*.* -DestinationPath C:\Archives\Draft.zip

Compress-Archiveиспользует параметр Path для указания корневого каталога C:\Reference с подстановочным знаком star-dot-star (*.*). Параметр DestinationPath указывает расположение архивного файла. Архив Draft.zip содержит Reference только файлы корневого каталога, а корневой каталог исключен.

Пример 6. Использование конвейера для архивации файлов

В этом примере файлы отправляются по конвейеру для создания архива. В архивном файле нет структуры каталогов, так как путь указывает только имена файлов.

Get-ChildItem -Path C:\Reference\Afile.txt, C:\Reference\Images\Bfile.txt |
  Compress-Archive -DestinationPath C:\Archives\PipelineFiles.zip

Get-ChildItemиспользует параметр Path для указания двух файлов из разных каталогов. Каждый файл представлен объектом FileInfo и отправляется по конвейеру Compress-Archive. Два указанных файла архивируются в PipelineFiles.zip.

Пример 7. Использование конвейера для архивации каталога

В этом примере каталог отправляется по конвейеру для создания архива. Файлы отправляются в виде объектов и каталогов FileInfo в виде объектов DirectoryInfo. Структура каталогов архива не включает корневой каталог, но его файлы и вложенные каталоги включаются в архив.

Get-ChildItem -Path C:\LogFiles | Compress-Archive -DestinationPath C:\Archives\PipelineDir.zip

Get-ChildItemиспользует параметр Path для указания корневого C:\LogFiles каталога. Каждый объект FileInfo и DirectoryInfo отправляется по конвейеру.

Compress-Archive добавляет каждый объект в PipelineDir.zip архив. Параметр Path не указан, так как объекты конвейера получаются в положение параметра 0.

Пример 8. Как рекурсия может повлиять на архивы

В этом примере показано, как рекурсия может дублировать файлы в архиве. Например, если вы используете Get-ChildItem с параметром Recurse . В процессе рекурсии каждый объект FileInfo и DirectoryInfo отправляется по конвейеру и добавляется в архив.

Get-ChildItem -Path C:\TestLog -Recurse |
  Compress-Archive -DestinationPath C:\Archives\PipelineRecurse.zip

Каталог C:\TestLog не содержит файлов. Он содержит подкаталог с именем testsub , содержащим testlog.txt файл.

Get-ChildItemиспользует параметр Path для указания корневого каталогаC:\TestLog. Параметр Recurse обрабатывает файлы и каталоги. Объект DirectoryInfo создается для testsub объекта FileInfo и объекта testlog.txtFileInfo.

Каждый объект отправляется по конвейеру Compress-Archive. DestinationPath указывает расположение архивного файла. Параметр Path не указан, так как объекты конвейера получаются в положение параметра 0.

В следующей сводке описывается PipelineRecurse.zip содержимое архива, содержащее повторяющийся файл:

  • Объект DirectoryInfo создает testsub каталог и содержит testlog.txt файл, который отражает исходную структуру каталогов.
  • Объект FileInfo создает дубликат testlog.txt в корневом каталоге архива. Создается повторяющийся файл, так как рекурсия отправляет объект Compress-Archiveфайла в . Это поведение ожидается, так как каждый объект, отправляемый по конвейеру, добавляется в архив.

Пример 9. Обновление существующего архивного файла

В этом примере обновляется существующий архивный файл Draft.zipв каталоге C:\Archives . В этом примере существующий архивный файл содержит корневой каталог и его файлы и вложенные каталоги.

Compress-Archive -Path C:\Reference -Update -DestinationPath C:\Archives\Draft.zip

Команда обновляет Draft.zip новые версии существующих файлов в каталоге C:\Reference и его подкаталогах. И новые файлы, добавленные C:\Reference в подкаталог, включаются в обновленный Draft.zip архив.

Параметры

-CompressionLevel

Указывает, сколько сжатия применяется при создании архивного файла. Для быстрого сжатия требуется меньше времени для создания файла, но может привести к большим размерам файлов.

Если этот параметр не указан, команда использует значение по умолчанию, оптимальное.

Ниже приведены допустимые значения для этого параметра:

  • Самый быстрый. Используйте самый быстрый метод сжатия, доступный для уменьшения времени обработки. Быстрое сжатие может привести к большему размеру файлов.
  • NoCompression. Не сжимает исходные файлы.
  • Оптимальный. Время обработки зависит от размера файла.
Тип:String
Допустимые значения:Optimal, NoCompression, Fastest
Position:Named
Default value:Optimal
Обязательно:False
Принять входные данные конвейера:False
Принять подстановочные знаки:False

-Confirm

Запрос подтверждения перед выполнением командлета.

Тип:SwitchParameter
Aliases:cf
Position:Named
Default value:False
Обязательно:False
Принять входные данные конвейера:False
Принять подстановочные знаки:False

-DestinationPath

Этот параметр является обязательным и указывает путь к выходному файлу архива. DestinationPath должен содержать имя zippped-файла, а также абсолютный или относительный путь к zippped-файлу.

Если имя файла в DestinationPath не имеет .zip расширения имени файла, командлет добавляет .zip расширение имени файла.

Тип:String
Position:1
Default value:None
Обязательно:True
Принять входные данные конвейера:False
Принять подстановочные знаки:False

-Force

Используйте этот параметр для перезаписи существующего архивного файла.

Тип:SwitchParameter
Position:Named
Default value:False
Обязательно:True
Принять входные данные конвейера:False
Принять подстановочные знаки:False

-LiteralPath

Указывает путь или пути к файлам, которые требуется добавить в архивный zip-файл. В отличие от параметра Path, значение LiteralPath используется точно так же, как и типизированный. Никакие символы не интерпретируются как знаки подстановки. Если путь содержит escape-символы, заключите каждый escape-символ в одинарные кавычки, чтобы указать PowerShell не интерпретировать какие-либо символы как escape-последовательности. Чтобы указать несколько путей и включить файлы в несколько расположений в выходном zippped-файле, используйте запятые для разделения путей.

Тип:String[]
Aliases:PSPath
Position:Named
Default value:None
Обязательно:True
Принять входные данные конвейера:True
Принять подстановочные знаки:False

-PassThru

Вызывает командлет выводить объект файла, представляющий созданный архивный файл.

Этот параметр появился в PowerShell 6.0.

Тип:SwitchParameter
Position:Named
Default value:False
Обязательно:False
Принять входные данные конвейера:False
Принять подстановочные знаки:False

-Path

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

Этот параметр принимает подстановочные знаки. Подстановочные знаки позволяют добавлять все файлы в каталог в архивный файл.

Использование подстановочных знаков с корневым каталогом влияет на содержимое архива:

  • Чтобы создать архив, включающий корневой каталог, и все его файлы и вложенные каталоги, укажите корневой каталог в path без подстановочных знаков. Например: -Path C:\Reference
  • Чтобы создать архив, который исключает корневой каталог, но zips всех его файлов и подкаталогов, используйте подстановочный знак звездочки (*). Например: -Path C:\Reference\*
  • Чтобы создать архив, который архивирует только файлы в корневом каталоге, используйте подстановочный знак star-dot-star (*.*). Подкаталоги корневого каталога не включены в архив. Например: -Path C:\Reference\*.*
Тип:String[]
Position:0
Default value:None
Обязательно:True
Принять входные данные конвейера:True
Принять подстановочные знаки:True

-Update

Обновляет указанный архив, заменив старые версии файлов в архиве более новыми версиями файлов с одинаковыми именами. Этот параметр также можно добавить для добавления файлов в существующий архив.

Тип:SwitchParameter
Position:Named
Default value:False
Обязательно:True
Принять входные данные конвейера:False
Принять подстановочные знаки:False

-WhatIf

Показывает, что произойдет при запуске командлета. Командлет не выполняется.

Тип:SwitchParameter
Aliases:wi
Position:Named
Default value:False
Обязательно:False
Принять входные данные конвейера:False
Принять подстановочные знаки:False

Входные данные

String

Можно передать строку, содержащую путь к одному или нескольким файлам.

Выходные данные

None

По умолчанию этот командлет не возвращает выходные данные.

FileInfo

При использовании параметра PassThru этот командлет возвращает объект FileInfo .

Примечания

Использование рекурсии и отправки объектов вниз конвейера может дублировать файлы в архиве. Например, если вы используете Get-ChildItem с параметром Recurse , каждый объект FileInfo и DirectoryInfo , отправляемый вниз конвейера, добавляется в архив.

Командлет Compress-Archive использует кодировку UTF-8. Другие средства ZIP-архива могут использовать другую схему кодирования. При извлечении файлов с именами файлов, не хранящихся в кодировке UTF-8, Expand-Archive используется необработанное значение, найденное в архиве. Это может привести к тому, что имя файла отличается от имени исходного файла, хранящегося в архиве.