Есть ли в PowerShell единый вкладыш, который будет архивировать/распаковывать файлы (* .Zip)?
DotNetZip позволит вам сделать это из PowerShell. Это не однострочная версия, но библиотека позволит вам написать нужный сценарий PowerShell.
Вы также можете использовать интерфейс COM, см. Сжать файлы с помощью Windows PowerShell, а затем упаковать гаджет боковой панели Windows Vista.
Поиск "Zip PowerShell" или "Unzip PowerShell" может также принести полезные результаты.
Вот как вы можете сделать это исключительно из 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())
Теперь в .NET Framework 4.5 есть класс ZipFile, который вы можете использовать следующим образом:
[System.Reflection.Assembly]::LoadWithPartialName('System.IO.Compression.FileSystem')
[System.IO.Compression.ZipFile]::ExtractToDirectory($sourceFile, $targetFolder)
Возможно, вы захотите проверить Расширения сообщества PowerShell (PSCX) , в котором специально для этого есть командлеты.
Я знаю, что это очень старый вопрос, но я только что увидел его в Твиттере и решил опубликовать текущий ответ.
PowerShell 5, доступный в настоящее время в Windows 10 или через Windows Management Framework 5 Production Preview , поставляется с двумя встроенными командлетами для "архивирования" и "разархивирования":
Я нахожу самое простое решение - использовать двоичные файлы 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 вокруг вывода текста, но на практике мне это никогда не нужно, поэтому я не стал беспокоиться.
Мне также нравится 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)
Джеймс Холвелл Мне нравится твой ответ, но я немного его расширил
# 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())
}
Я создал модуль, совместимый с PowerShell 2.0, который использует собственные команды ОС Windows для синхронного сжатия и распаковки файлов. Это работает на старых ОС, таких как Windows XP, и не требует .Net 4.5 или каких-либо других внешних инструментов. Функции также будут блокировать выполнение скрипта, пока все файлы не будут заархивированы/разархивированы. Вы можете найти дополнительную информацию и модуль в моем блоге здесь .
WinRAR может работать в режиме CMD, принимая аргументы
ionic подход скалы:
https://dotnetzip.codeplex.com/wikipage?title=PS-Examples
поддерживает пароли, другие методы шифрования и т. д.