Odpowiedzi:
DotNetZip pozwoli ci to zrobić z PowerShell. Nie jest to jednowierszowa, ale biblioteka pozwoli Ci napisać potrzebny skrypt PowerShell.
Możesz także użyć interfejsu COM, zobacz Kompresowanie plików za pomocą Windows PowerShell, a następnie zapakowanie gadżetu paska bocznego systemu Windows Vista .
Googling „zip powershell” lub „unzip powershell” może również przynieść przydatne wyniki.
W ten sposób możesz to zrobić wyłącznie z Powershell bez żadnych zewnętrznych narzędzi. To rozpakowuje plik o nazwie test.zip do bieżącego katalogu roboczego:
$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())
faktycznie rozpakowuje.
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()) }
Teraz w .NET Framework 4.5 dostępna jest klasa ZipFile , której można użyć w następujący sposób:
[System.Reflection.Assembly]::LoadWithPartialName('System.IO.Compression.FileSystem')
[System.IO.Compression.ZipFile]::ExtractToDirectory($sourceFile, $targetFolder)
Warto sprawdzić rozszerzenia społeczności PowerShell (PSCX), które mają specjalnie do tego przeznaczone polecenia cmdlet.
Wiem, że to bardzo stare pytanie, ale właśnie zobaczyłem, że jest to link na Twitterze i pomyślałem, że opublikuję aktualną odpowiedź.
PowerShell 5, obecnie dostępny w systemie Windows 10 lub za pośrednictwem wersji zapoznawczej Windows Management Framework 5 , zawiera dwa wbudowane polecenia cmdlet do „kompresowania” i „rozpakowywania”:
Znajduję najprostsze rozwiązanie, aby po prostu użyć plików binarnych infozip, z których korzystałem od lat i które używam w środowisku 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.
Łatwo byłoby umieścić otoczkę PowerShell wokół tekstu wyjściowego, ale w praktyce nigdy tego nie potrzebuję, więc nie zawracałem sobie głowy.
Lubię też Info-ZIP (silnik Zip występujący w większości innych programów Zip) i 7-Zip , kolejny ulubiony, który ma zarówno GUI, jak i narzędzie Zip z linii poleceń. Chodzi o to, że istnieją pewne dobre narzędzia wiersza polecenia, które będą działać dla większości zadań PowerShell.
Istnieje kilka sztuczek w uruchamianiu narzędzi wiersza poleceń, które nie zostały zbudowane z myślą o PowerShell:
Uruchamianie pliku wykonywalnego, który zaczyna się od numeru w nazwie, poprzedza go znakiem „Ampersand” (&).
I 7zip.exe
Zawiń każdy token, którego narzędzie oczekuje w wierszu poleceń, w cudzysłowie.
& „c: \ ścieżka ze spacją \ SomeCommand.exe” ”/ parametr2” „/ parametr2” „Wartość parametru2” „Wartość2” „z cytatem”
Spróbuj tego:
zip filename.zip (Get-ChildItem somepath\*)
Lub nawet:
zip filename.zip (Get-Content ListOfFiles.txt)
James Holwell Podoba mi się twoja odpowiedź, ale trochę ją rozwinąłem
# 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())
}
Podejście jonowe kołysze:
https://dotnetzip.codeplex.com/wikipage?title=PS-Examples
obsługuje hasła, inne metody kryptograficzne itp.
Utworzyłem moduł kompatybilny z PowerShell 2.0, który używa natywnych poleceń systemu operacyjnego Windows do synchronizowania i rozpakowywania plików. Działa to na starszych systemach operacyjnych, takich jak Windows XP, i nie wymaga .Net 4.5 ani żadnych innych narzędzi zewnętrznych. Funkcje będą również blokować wykonywanie skryptu, dopóki wszystkie pliki nie zostaną spakowane / rozpakowane. Więcej informacji i moduł można znaleźć na moim blogu tutaj .