Відповіді:
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())
$destination.Copyhere($zip_file.items())
робить фактичне розпакування.
function unzip($filename) { if (!(test-path $filename)) { throw "$filename does not exist" } $shell = new-object -com shell.application $shell.namespace($pwd.path).copyhere($shell.namespace((join-path $pwd $filename)).items()) }
Тепер у .NET Framework 4.5 є клас ZipFile, який ви можете використовувати так:
[System.Reflection.Assembly]::LoadWithPartialName('System.IO.Compression.FileSystem')
[System.IO.Compression.ZipFile]::ExtractToDirectory($sourceFile, $targetFolder)
Ви можете перевірити розширення спільноти PowerShell (PSCX), які мають командлети спеціально для цього.
Я знаю, що це дуже давнє запитання, але я щойно бачив, як це пов’язано у Twitter, подумав, що опублікую поточну відповідь.
PowerShell 5, який зараз доступний у Windows 10 або за допомогою Windows Management Framework 5 Preview 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.
Було б одразу ж поставити обгортку з силою оболонки навколо виводу тексту, але на практиці мені це ніколи не потрібно, тому я не переймався.
Мені також подобається Info-ZIP (двигун Zip, який можна знайти у більшості інших Zip-утиліт) і 7-Zip , ще один фаворит, який має як графічний інтерфейс, так і утиліту Zip командного рядка. Суть у тому, що є кілька хороших утиліт командного рядка, які працюватимуть для більшості завдань PowerShell.
Існує кілька хитрощів із запуском утиліт командного рядка, які не були побудовані з урахуванням PowerShell:
Запустивши виконуваний файл, який починається з числа в імені, передмовляйте його Ampersand (&).
& 7zip.exe
Оберніть кожен маркер, утиліта очікує побачити з командного рядка в лапки.
& "c: \ шлях з пробілом \ SomeCommand.exe" "/ parameter2" "/ parameter2" "value2" value "" Value2 `" з цитатою "
Спробуйте це:
zip filename.zip (Get-ChildItem somepath\*)
Або навіть:
zip filename.zip (Get-Content ListOfFiles.txt)
James Holwell Мені подобається ваша відповідь, але я її трохи розширив
# 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())
}
Іонний підхід скель:
https://dotnetzip.codeplex.com/wikipage?title=PS-Приклади
підтримує паролі, інші крипто-методи тощо.
Я створив модуль, сумісний із PowerShell 2.0, який використовує вбудовані команди ОС Windows, щоб синхронізувати та розпаковувати файли. Це працює на старих ОС, таких як Windows XP, і не потребує .Net 4.5 або будь-яких інших зовнішніх інструментів. Функції також блокуватимуть виконання сценарію до тих пір, поки всі файли не будуть скопійовані / розпаковані. Ви можете знайти більше інформації та модуль у моєму блозі тут .