Antworten:
Mit DotNetZip können Sie dies von PowerShell aus tun. Es ist kein Einzeiler, aber in der Bibliothek können Sie das benötigte PowerShell-Skript schreiben.
Sie können auch die COM-Schnittstelle verwenden. Weitere Informationen finden Sie unter Komprimieren von Dateien mit Windows PowerShell. Packen Sie dann ein Windows Vista-Sidebar-Gadget .
Wenn Sie "zip powershell" oder "unzip powershell" googeln, werden möglicherweise auch nützliche Ergebnisse erzielt.
Dies ist, wie Sie es ohne externe Werkzeuge von Powershell aus tun können. Dies entpackt eine Datei namens test.zip in das aktuelle Arbeitsverzeichnis:
$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())
übernimmt das eigentliche Entpacken.
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()) }
In .NET Framework 4.5 gibt es jetzt eine ZipFile- Klasse, die Sie folgendermaßen verwenden können:
[System.Reflection.Assembly]::LoadWithPartialName('System.IO.Compression.FileSystem')
[System.IO.Compression.ZipFile]::ExtractToDirectory($sourceFile, $targetFolder)
Möglicherweise möchten Sie die PowerShell Community Extensions (PSCX) auschecken, die speziell für diesen Zweck Cmdlets enthält.
Ich weiß, dass dies eine sehr alte Frage ist, aber ich habe sie gerade auf Twitter verlinkt gesehen, in der Annahme, ich würde eine aktuelle Antwort posten.
PowerShell 5, das derzeit unter Windows 10 oder über die Windows Management Framework 5-Produktionsvorschau verfügbar ist , verfügt über zwei integrierte Cmdlets zum 'Zippen' und 'Entpacken':
Ich finde die einfachste Lösung, um nur Infozip-Binärdateien zu verwenden, die ich seit Jahren verwende und in einer UNIX-Umgebung verwende.
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.
Es wäre unkompliziert, einen Powershell-Wrapper um die Textausgabe zu legen, aber in der Praxis brauche ich das nie, also habe ich mich nicht darum gekümmert.
Ich mag auch Info-ZIP (die Zip-Engine, die in den meisten anderen Zip-Dienstprogrammen zu finden ist) und 7-Zip , einen weiteren Favoriten, der sowohl ein GUI- als auch ein Befehlszeilen-Zip-Dienstprogramm enthält. Der Punkt ist, dass es einige gute Befehlszeilendienstprogramme gibt, die für die meisten PowerShell-Aufgaben geeignet sind.
Es gibt einige Tricks zum Ausführen von Befehlszeilendienstprogrammen, die nicht mit PowerShell erstellt wurden:
Wenn Sie eine ausführbare Datei ausführen, die mit einer Zahl im Namen beginnt, müssen Sie ein kaufmännisches Und (&) voranstellen.
& 7zip.exe
Schließen Sie jedes Token, das das Dienstprogramm von der Befehlszeile erwartet, in Anführungszeichen ein.
& "c: \ Pfad mit Leerzeichen \ SomeCommand.exe" "/ parameter2" "/ parameter2" "parameter2s Wert" "Wert2" "mit einem Anführungszeichen"
Versuche dies:
zip filename.zip (Get-ChildItem somepath\*)
Oder auch:
zip filename.zip (Get-Content ListOfFiles.txt)
James Holwell Ich mag Ihre Antwort, aber ich habe sie ein wenig erweitert
# 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())
}
Der ionische Ansatz rockt:
https://dotnetzip.codeplex.com/wikipage?title=PS-Examples
unterstützt Passwörter, andere Kryptomethoden usw.
Ich habe ein PowerShell 2.0-kompatibles Modul erstellt, das die nativen Windows-Betriebssystembefehle verwendet, um Dateien synchron zu komprimieren und zu dekomprimieren. Dies funktioniert unter älteren Betriebssystemen wie Windows XP und erfordert weder .NET 4.5 noch andere externe Tools. Die Funktionen blockieren auch die Skriptausführung, bis alle Dateien komprimiert / dekomprimiert wurden. Sie können weitere Informationen und das Modul auf meinem Blog hier finden .