Как создать zip-архив с помощью PowerShell? - PullRequest
225 голосов
/ 20 июля 2009

Можно ли создать zip-архив с помощью PowerShell?

Ответы [ 25 ]

2 голосов
/ 18 октября 2017

Загрузка класса [System.IO.IOException] и использование его методов является важным шагом для подавления нежелательных ошибок, поскольку этот класс не является родным для PowerShell, поэтому ожидайте различные контексты ошибок без него.

Я управлял ошибкой своего скрипта для T, но при использовании [System.IO.Compression.ZipFile] class

было получено много лишних красных «файловых файлов».
function zipFiles(
    [Parameter(Position=0, Mandatory=$true]
    [string] $sourceFolder,
    [Parameter(Position=1, Mandatory=$true]
    [string]$zipFileName,
    [Parameter(Position=2, Mandatory=$false]
    [bool]$overwrite)

{   
Add-Type -Assembly System.IO
Add-Type -Assembly System.IO.Compression.FileSystem

$compressionLevel = [System.IO.Compression.CompressionLevel]::Optimal

$directoryTest = (Test-Path $dailyBackupDestFolder)
$fileTest = (Test-Path $zipFileName)

if ( $directoryTest -eq $false) 
{ 
    New-Item -ItemType Directory -Force -Path $dailyBackupDestFolder 
}

     if ( $fileTest -eq $true)
     {
           if ($overwrite -eq $true ){Remove-Item $zipFileName}
     }   


    try
    {
         [System.IO.Compression.ZipFile]::CreateFromDirectory($sourceFolder,$zipFileName,$compressionLevel)       

    }
    catch [System.IO.IOException] 
    {
       Write-Output ($dateTime + ' | ' + $_.Exception.Message ) | Out-File $logFile -append -force 
    }
} 

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

2 голосов
/ 02 декабря 2016

Вот полный пример командной строки для запуска из cmd.exe или из ssh или что вы хотите!

powershell.exe -nologo -noprofile -command "&{ Add-Type -A 'System.IO.Compression.FileSystem' [System.IO.Compression.ZipFile]::CreateFromDirectory('c:/path/to/source/folder/', 'c:/path/to/output/file.zip');}"

Привет

1 голос
/ 15 марта 2019

Лот изменился с момента публикации первоначального ответа. Вот несколько последних примеров использования команды Compress-Archive .

Команда для создания нового файла архива Draft.zip путем сжатия двух файлов Draftdoc.docx и diagram2.vsd, указанных параметром Path. Уровень сжатия, указанный для этой операции, является оптимальным.

Compress-Archive -Path C:\Reference\Draftdoc.docx, C:\Reference\Images\diagram2.vsd -CompressionLevel Optimal -DestinationPath C:\Archives\Draft.Zip

Команда для создания нового архивного файла, Draft.zip, путем сжатия двух файлов, Draft doc.docx и Diagram [2].vsd, указанных параметром LiteralPath. Уровень сжатия, указанный для этой операции, является оптимальным.

Compress-Archive -LiteralPath 'C:\Reference\Draft Doc.docx', 'C:\Reference\Images\Diagram [2].vsd'  -CompressionLevel Optimal -DestinationPath C:\Archives\Draft.Zip

Команда для создания нового архивного файла, Draft.zip, в папке C:\Archives. Новый архивный файл содержит каждый файл в папке C: \ Reference , поскольку вместо имен файлов в параметре Path использовался подстановочный знак.

Compress-Archive -Path C:\Reference\* -CompressionLevel Fastest -DestinationPath C:\Archives\Draft

Команда создает архив из всей папки, C:\Reference

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

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

0 голосов
/ 08 марта 2017

Этот скрипт повторяет все каталоги и архивирует каждый из них

Get-ChildItem -Attributes d | foreach {write-zip $ .Name "$ ($ .Name) .zip"}

0 голосов
/ 14 января 2015

Ионный подход пород:

https://dotnetzip.codeplex.com/wikipage?title=PS-Examples

поддерживает пароли, другие методы шифрования и т. Д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...