web-dev-qa-db-fra.com

Comment compresser / décompresser des fichiers dans Powershell?

Existe-t-il une ligne qui compressera/décompressera les fichiers (* .Zip) dans PowerShell?

105
BlueGene

DotNetZip vous permettra de le faire à partir de PowerShell. Ce n'est pas une ligne, mais la bibliothèque vous permettra d'écrire le script PowerShell dont vous avez besoin.

Vous pouvez également utiliser l'interface COM, voir compresser des fichiers avec Windows PowerShell puis empaqueter un gadget de barre latérale Windows Vista.

Googler "Zip powershell" ou "unzip powershell" peut également donner des résultats utiles.

21
Kevin Kuphal

C'est ainsi que vous pouvez le faire uniquement à partir de Powershell sans outils externes. Cela décompresse un fichier appelé test.Zip dans le répertoire de travail actuel:

$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

Maintenant, dans .NET Framework 4.5, il existe une classe ZipFile que vous pouvez utiliser comme ceci:

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

Vous pouvez consulter The PowerShell Community Extensions (PSCX) qui a des applets de commande spécialement pour cela.

18
Kevin Colby

Je sais que c'est une très vieille question, mais je viens de la voir liée sur Twitter et je pensais que je posterais une réponse actuelle.

PowerShell 5, actuellement disponible sur Windows 10 ou via Windows Management Framework 5 Production Preview , est livré avec deux applets de commande intégrées pour le `` zipper '' et le `` décompresser '':

16
Windos

Je trouve la solution la plus simple pour utiliser simplement les binaires infozip que j'utilise depuis des années et que j'utilise dans un environnement 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.

Il serait simple de mettre un wrapper PowerShell autour de la sortie de texte, mais dans la pratique, je n'en ai jamais besoin, donc je n'ai pas pris la peine.

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

5
Brian Reiter

J'aime aussi Info-Zip (le moteur Zip trouvé dans la plupart des autres utilitaires Zip) et 7-Zip , un autre favori qui a à la fois une interface graphique et une utilitaire Zip en ligne de commande. Le fait est qu'il existe de bons utilitaires de ligne de commande qui fonctionneront pour la plupart des tâches PowerShell.

Il existe quelques astuces pour exécuter des utilitaires de ligne de commande qui n'ont pas été construits avec PowerShell à l'esprit:

  • Exécuter un exécutable commençant par un nombre dans le nom, faites-le précéder d'une esperluette (&).

    & 7Zip.exe

  • Enveloppez chaque jeton, l'utilitaire s'attend à voir à partir de la ligne de commande, entre guillemets.

    & "c:\chemin avec espace\SomeCommand.exe" "/ parameter2" "/ parameter2" "Paramètre2 Value" "Value2` "avec un devis"

Essaye ça:

Zip filename.Zip (Get-ChildItem somepath\*)

Ou même:

Zip filename.Zip (Get-Content ListOfFiles.txt)
5
Nathan Hartley

James Holwell j'aime votre réponse mais je l'ai un peu développée

# 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

J'ai créé un module compatible PowerShell 2.0 qui utilise les commandes natives du système d'exploitation Windows pour compresser et décompresser des fichiers de manière synchrone. Cela fonctionne sur les anciens systèmes d'exploitation, comme Windows XP, et ne nécessite pas .Net 4.5 ou tout autre outil externe. Les fonctions bloqueront également l'exécution du script jusqu'à ce que les fichiers aient tous été zippés/décompressés. Vous pouvez trouver plus d'informations et le module sur mon blog ici .

0
deadlydog

WinRAR peut fonctionner en mode CMD en acceptant des arguments

0
adopilot

Les roches d'approche ionic:

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

prend en charge les mots de passe, d'autres méthodes de cryptage, etc.