it-swarm.com.de

Wie kann ich Dateien in Powershell komprimieren / entpacken?

Gibt es einen Einzeiler, der Dateien (* .Zip) in PowerShell komprimiert/entpackt?

105
BlueGene

DotNetZip ermöglicht es Ihnen, dies von PowerShell aus zu tun. Es ist kein Einzeiler, aber in der Bibliothek können Sie das benötigte PowerShell-Skript schreiben.

Sie können auch die COM-Oberfläche verwenden, siehe Dateien mit Windows PowerShell komprimieren und dann ein Windows Vista-Seitenleisten-Gadget verpacken.

Das Googeln von "Zip Powershell" oder "Unzip Powershell" kann ebenfalls nützliche Ergebnisse liefern.

21
Kevin Kuphal

So können Sie es rein von Powershell aus ohne externe Werkzeuge tun. Dadurch wird eine Datei mit dem Namen test.Zip in das aktuelle Arbeitsverzeichnis entpackt:

$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

In .NET Framework 4.5 gibt es jetzt eine ZipFile Klasse, die Sie wie folgt verwenden können:

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

Vielleicht möchten Sie The PowerShell Community Extensions (PSCX) auschecken, das speziell dafür Cmdlets enthält.

18
Kevin Colby

Ich weiß, dass dies eine sehr alte Frage ist, aber ich habe sie gerade auf Twitter verlinkt gesehen, weil ich dachte, ich würde eine aktuelle Antwort posten.

PowerShell 5, das derzeit unter Windows 10 oder über Windows Management Framework 5 Production Preview verfügbar ist, enthält zwei integrierte Cmdlets zum "Zippen" und "Entpacken":

16
Windos

Ich finde die einfachste Lösung, 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.

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

5
Brian Reiter

Ich mag auch Info-Zip (die Zip-Engine, die in den meisten anderen Zip-Dienstprogrammen enthalten ist) und 7-Zip , einen weiteren Favoriten, der sowohl eine GUI als auch ein Befehlszeilen-Zip-Dienstprogramm enthält. Der Punkt ist, dass es einige gute Befehlszeilenprogramme gibt, die für die meisten PowerShell-Aufgaben funktionieren.

Es gibt einige Tricks zum Ausführen von Befehlszeilenprogrammen, die nicht für PowerShell entwickelt wurden:

  • Wenn Sie eine ausführbare Datei ausführen, die mit einer Zahl im Namen beginnt, stellen Sie ihr ein kaufmännisches Und (&) voran.

    & 7Zip.exe

  • Schließen Sie jedes Token, das das Dienstprogramm in 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)
5
Nathan Hartley

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()) 
}
2
Nico

Ich habe ein PowerShell 2.0-kompatibles Modul erstellt, das die nativen Windows-Betriebssystembefehle verwendet, um Dateien synchron zu komprimieren und zu entpacken. 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/entpackt wurden. Sie können weitere Informationen und das Modul finden Sie in meinem Blog hier .

0
deadlydog

WinRAR kann im CMD-Modus arbeiten und Argumente akzeptieren

0
adopilot

Die ionic Annäherung rockt:

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

unterstützt Passwörter, andere Kryptomethoden usw.