it-swarm-ru.tech

Как сжать / разархивировать файлы в Powershell?

Есть ли в PowerShell единый вкладыш, который будет архивировать/распаковывать файлы (* .Zip)?

105
BlueGene

DotNetZip позволит вам сделать это из PowerShell. Это не однострочная версия, но библиотека позволит вам написать нужный сценарий PowerShell.

Вы также можете использовать интерфейс COM, см. Сжать файлы с помощью Windows PowerShell, а затем упаковать гаджет боковой панели Windows Vista.

Поиск "Zip PowerShell" или "Unzip PowerShell" может также принести полезные результаты.

21
Kevin Kuphal

Вот как вы можете сделать это исключительно из Powershell без каких-либо внешних инструментов. Это распаковывает файл с именем test.Zip в текущий рабочий каталог:

$Shell_app=new-object -com Shell.application
$filename = "test.Zip"
$Zip_file = $Shell_app.namespace((Get-Location).Path + "\$filename")
$destination = $Shell_app.namespace((Get-Location).Path)
$destination.Copyhere($Zip_file.items())
155
Ameer Deen

Теперь в .NET Framework 4.5 есть класс ZipFile, который вы можете использовать следующим образом:

[System.Reflection.Assembly]::LoadWithPartialName('System.IO.Compression.FileSystem')
[System.IO.Compression.ZipFile]::ExtractToDirectory($sourceFile, $targetFolder)
56
mousio

Возможно, вы захотите проверить Расширения сообщества PowerShell (PSCX) , в котором специально для этого есть командлеты.

18
Kevin Colby

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

PowerShell 5, доступный в настоящее время в Windows 10 или через Windows Management Framework 5 Production Preview , поставляется с двумя встроенными командлетами для "архивирования" и "разархивирования":

16
Windos

Я нахожу самое простое решение - использовать двоичные файлы infozip, которые я использовал годами, и использовать их в среде UNIX.

PS> Zip -9r ../test.Zip * 
PS> cd .. 
PS> unzip -t test.Zip Archive:  test.Zip
    testing: LinqRepository/          OK
    testing: LinqRepository/ApplicationService.cs   OK
    testing: LinqRepository/bin/      OK 
... 
No errors detected in compressed data of test.Zip.

Было бы просто поместить оболочку powershell вокруг вывода текста, но на практике мне это никогда не нужно, поэтому я не стал беспокоиться.

http://www.info-Zip.org/

5
Brian Reiter

Мне также нравится Info-Zip (движок Zip, встречающийся в большинстве других утилит Zip) и 7-Zip , еще один фаворит, в котором есть утилита Zip с графическим интерфейсом и командной строкой. Дело в том, что есть несколько хороших утилит командной строки, которые будут работать для большинства задач PowerShell.

Есть несколько хитростей для запуска утилит командной строки, которые не были созданы с учетом PowerShell:

  • Запустив исполняемый файл, который начинается с числа в имени, предваряйте его амперсандом (&).

    & 7Zip.exe

  • Оберните каждый токен, который утилита ожидает увидеть из командной строки в кавычках.

    & "c:\path with space\SomeCommand.exe" "/ parameter2" "/ parameter2" "Значение параметра2" "Значение2` "с кавычкой"

Попробуй это:

Zip filename.Zip (Get-ChildItem somepath\*)

Или даже:

Zip filename.Zip (Get-Content ListOfFiles.txt)
5
Nathan Hartley

Джеймс Холвелл Мне нравится твой ответ, но я немного его расширил

# Example
#unzip "myZip.Zip" "C:\Users\me\Desktop" "c:\mylocation"
function unzip($fileName, $sourcePath, $destinationPath)
{
    $Shell = new-object -com Shell.application
    if (!(Test-Path "$sourcePath\$fileName"))
    {
        throw "$sourcePath\$fileName does not exist" 
    }
    New-Item -ItemType Directory -Force -Path $destinationPath -WarningAction SilentlyContinue
    $Shell.namespace($destinationPath).copyhere($Shell.namespace("$sourcePath\$fileName").items()) 
}
2
Nico

Я создал модуль, совместимый с PowerShell 2.0, который использует собственные команды ОС Windows для синхронного сжатия и распаковки файлов. Это работает на старых ОС, таких как Windows XP, и не требует .Net 4.5 или каких-либо других внешних инструментов. Функции также будут блокировать выполнение скрипта, пока все файлы не будут заархивированы/разархивированы. Вы можете найти дополнительную информацию и модуль в моем блоге здесь .

0
deadlydog

WinRAR может работать в режиме CMD, принимая аргументы

0
adopilot

ionic подход скалы:

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

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

0
Jonesome Reinstate Monica