Réponses:
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 les fichiers avec Windows PowerShell, puis conditionner un gadget Windows Vista Sidebar .
Googler "zip PowerShell" ou "Unzip PowerShell" pourrait également donner des résultats utiles.
Voici comment 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 en cours:
$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())
effectue la décompression réelle.
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()) }
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)
Vous voudrez peut-être consulter les extensions de la communauté PowerShell (PSCX) qui disposent d’applets de commande spécialement conçues à cet effet.
Je sais que la question est très ancienne, mais je viens de la voir reliée sur Twitter, pensant publier une réponse actualisée.
PowerShell 5, actuellement disponible sous Windows 10 ou via Windows Management Framework 5 Production Preview , est fourni avec deux applets de commande intégrées pour la compression et le décompression:
Je trouve la solution la plus simple qui consiste à utiliser les fichiers binaires d’Infozip que j’utilise depuis des années et à utiliser 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 tout à fait direct de placer une enveloppe PowerShell autour du texte mais, dans la pratique, je n'en ai jamais besoin et je ne m'en suis donc pas soucié.
J'aime aussi Info-ZIP (le moteur Zip que l'on trouve dans la plupart des autres utilitaires Zip) et 7-Zip , un autre favori qui possède à la fois une interface graphique et un utilitaire Zip en ligne de commande. Le fait est que de bons utilitaires de ligne de commande fonctionnent pour la plupart des tâches PowerShell.
Il existe des astuces pour exécuter des utilitaires de ligne de commande qui n'ont pas été conçues avec PowerShell:
Si vous exécutez un fichier exécutable dont le nom commence par un numéro, faites-le précéder d’une esperluette (&).
& 7zip.exe
Entourez chaque jeton que l’utilitaire attend de la ligne de commande, entre guillemets.
& "c: \ chemin avec espace \ SomeCommand.exe" "/ paramètre2" "/ paramètre2" "valeur de paramètre2" "valeur2` "avec une citation"
Essaye ça:
zip filename.zip (Get-ChildItem somepath\*)
Ou même:
zip filename.zip (Get-Content ListOfFiles.txt)
James Holwell j'aime votre réponse mais je l'ai développée un peu
# 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())
}
WinRAR peut fonctionner en mode CMD en acceptant des arguments
L'approche ionique bascule:
https://dotnetzip.codeplex.com/wikipage?title=PS-Examples
prend en charge les mots de passe, d'autres méthodes de cryptage, etc.
J'ai créé un module compatible avec 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 systèmes d'exploitation plus anciens, tels que Windows XP, et ne nécessite pas .Net 4.5 ni aucun autre outil externe. Les fonctions bloqueront également l'exécution du script jusqu'à ce que tous les fichiers aient été compressés / décompressés. Vous pouvez trouver plus d'informations et le module sur mon blog ici .