Поделиться через


Compress-Archive

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

Синтаксис

Path (по умолчанию)

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

PathWithUpdate

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

PathWithForce

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

LiteralPathWithUpdate

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

LiteralPathWithForce

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

LiteralPath

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

Описание

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

Командлет Compress-Archive использует API System.IO.Compression.ZipArchive для сжатия файлов. API ограничивает максимальный размер файла до 2 ГБ. Дополнительные сведения см. в разделе 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

Параметр пути принимает определенные имена файлов и имена файлов с подстановочными знаками, *.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 использует параметр пути для указания корневого каталога C:\Reference. Параметр DestinationPath указывает расположение архивного файла. Архив Draft.zip включает в себя корневой каталог Reference, а также все его файлы и подкаталоги.

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

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

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

Compress-Archive использует параметр пути для указания корневого каталога, 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 использует параметр пути для указания двух файлов из разных каталогов. Каждый файл представлен объектом FileInfo и отправляется по конвейеру в Compress-Archive. Два указанных файла архивируются в PipelineFiles.zip.

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

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

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

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

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

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

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

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

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

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

Каждый объект отправляется по конвейеру в Compress-Archive. DestinationPath указывает расположение архивного файла. Параметр пути не указан, так как объекты конвейера получаются в положение параметра 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

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

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

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

  • самый быстрый. Используйте самый быстрый метод сжатия, доступный для уменьшения времени обработки. Быстрое сжатие может привести к большему размеру файлов.
  • Без сжатия. Не сжимает исходные файлы.
  • Оптимальный. Время обработки зависит от размера файла.

Свойства параметра

Тип:String
Default value:Optimal
Допустимые значения:Optimal, NoCompression, Fastest
Поддерживаются подстановочные знаки:False
DontShow:False

Наборы параметров

(All)
Position:Named
Обязательно:False
Значение из конвейера:False
Значение из конвейера по имени свойства:False
Значение из оставшихся аргументов:False

-Confirm

Запрашивает подтверждение перед запуском cmdlet.

Свойства параметра

Тип:SwitchParameter
Default value:False
Поддерживаются подстановочные знаки:False
DontShow:False
Aliases:cf

Наборы параметров

(All)
Position:Named
Обязательно:False
Значение из конвейера:False
Значение из конвейера по имени свойства:False
Значение из оставшихся аргументов:False

-DestinationPath

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

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

Свойства параметра

Тип:String
Default value:None
Поддерживаются подстановочные знаки:False
DontShow:False

Наборы параметров

(All)
Position:1
Обязательно:True
Значение из конвейера:False
Значение из конвейера по имени свойства:False
Значение из оставшихся аргументов:False

-Force

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

Свойства параметра

Тип:SwitchParameter
Default value:False
Поддерживаются подстановочные знаки:False
DontShow:False

Наборы параметров

PathWithForce
Position:Named
Обязательно:True
Значение из конвейера:False
Значение из конвейера по имени свойства:False
Значение из оставшихся аргументов:False
LiteralPathWithForce
Position:Named
Обязательно:True
Значение из конвейера:False
Значение из конвейера по имени свойства:False
Значение из оставшихся аргументов:False

-LiteralPath

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

Свойства параметра

Тип:

String[]

Default value:None
Поддерживаются подстановочные знаки:False
DontShow:False
Aliases:PSPath

Наборы параметров

LiteralPathWithUpdate
Position:Named
Обязательно:True
Значение из конвейера:False
Значение из конвейера по имени свойства:True
Значение из оставшихся аргументов:False
LiteralPathWithForce
Position:Named
Обязательно:True
Значение из конвейера:False
Значение из конвейера по имени свойства:True
Значение из оставшихся аргументов:False
LiteralPath
Position:Named
Обязательно:True
Значение из конвейера:False
Значение из конвейера по имени свойства:True
Значение из оставшихся аргументов:False

-PassThru

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

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

Свойства параметра

Тип:SwitchParameter
Default value:False
Поддерживаются подстановочные знаки:False
DontShow:False

Наборы параметров

(All)
Position:Named
Обязательно:False
Значение из конвейера:False
Значение из конвейера по имени свойства:False
Значение из оставшихся аргументов:False

-Path

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

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

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

  • Чтобы создать архив, который включает корневой каталог, а также все его файлы и вложенные каталоги, укажите корневой каталог в пути без подстановочных знаков. Например: -Path C:\Reference
  • Чтобы создать архив, который исключает корневом каталоге, но zips всех его файлов и подкаталогов, используйте подстановочный знак звездочки (*). Например: -Path C:\Reference\*
  • Чтобы создать архив, который архивирует только файлы в корневом каталоге, используйте подстановочный знак *.* star. Подкаталоги корневого каталога не включены в архив. Например: -Path C:\Reference\*.*

Свойства параметра

Тип:

String[]

Default value:None
Поддерживаются подстановочные знаки:True
DontShow:False

Наборы параметров

Path
Position:0
Обязательно:True
Значение из конвейера:True
Значение из конвейера по имени свойства:True
Значение из оставшихся аргументов:False
PathWithUpdate
Position:0
Обязательно:True
Значение из конвейера:True
Значение из конвейера по имени свойства:True
Значение из оставшихся аргументов:False
PathWithForce
Position:0
Обязательно:True
Значение из конвейера:True
Значение из конвейера по имени свойства:True
Значение из оставшихся аргументов:False

-Update

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

Свойства параметра

Тип:SwitchParameter
Default value:False
Поддерживаются подстановочные знаки:False
DontShow:False

Наборы параметров

PathWithUpdate
Position:Named
Обязательно:True
Значение из конвейера:False
Значение из конвейера по имени свойства:False
Значение из оставшихся аргументов:False
LiteralPathWithUpdate
Position:Named
Обязательно:True
Значение из конвейера:False
Значение из конвейера по имени свойства:False
Значение из оставшихся аргументов:False

-WhatIf

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

Свойства параметра

Тип:SwitchParameter
Default value:False
Поддерживаются подстановочные знаки:False
DontShow:False
Aliases:wi

Наборы параметров

(All)
Position:Named
Обязательно:False
Значение из конвейера:False
Значение из конвейера по имени свойства:False
Значение из оставшихся аргументов:False

CommonParameters

Этот командлет поддерживает общие параметры: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutBuffer, -OutVariable, -PipelineVariable, -ProgressAction, -Verbose, -WarningAction и -WarningVariable. Дополнительные сведения см. в разделе about_CommonParameters.

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

String

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

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

None

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

FileInfo

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

Примечания

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

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