web-dev-qa-db-fra.com

Compresser et décompresser un fichier dans Powershell 4

J'utilise Windows Server 2012 R2 (64 bits). J'ai la version 4 de Powershell disponible. J'essaie de compresser et décompresser des fichiers. Lorsque j'essaie la commande Write-Zip, elle me renvoie l'erreur suivante:

Write-Zip: le terme 'Write-Zip' n'est pas reconnu en tant que nom d'une applet de commande, fonction, fichier de script ou programme exploitable. Vérifiez l'orthographe du nom ou, si un chemin a été inclus, vérifiez que le chemin est correct et réessayez.

Que dois-je faire pour le réparer? Dois-je installer Zip/winrar sur le serveur? Ou existe-t-il une autre commande permettant de compresser/décompresser des fichiers?

5
Raji

Write-Zip semble faire partie de http://pscx.codeplex.com/ qui nécessite une installation distincte avant de pouvoir l'utiliser. 

Toutefois, si vous souhaitez simplement créer une archive Zip à partir d'un dossier, vous pouvez simplement exécuter

$source = "c:\temp\source"
$archive = "c:\temp\archive.Zip"

Add-Type -Assembly "system.io.compression.filesystem"
[io.compression.zipfile]::CreateFromDirectory($source, $archive)

Cela utilise la méthode CreateFromDirectory de la classe .NET Framework ZipFile. Il crée une archive Zip à partir des fichiers situés dans le dossier $source et crée une archive telle que définie dans la variable $archive. Remarque, ZipFile class a été introduit dans .NET Framework 4.5

15
kim

Vous pouvez utiliser l’objet powershell personnalisé New-Object -ComObject Shell.Application et copier le fichier avec des drapeaux pour le décompresser. 

$filePath = "foo.Zip"
$Shell = New-Object -ComObject Shell.Application
$zipFile = $Shell.NameSpace($filePath)
$destinationFolder = $Shell.NameSpace("C:\Program Files\WindowsPowerShell\Modules")

$copyFlags = 0x00
$copyFlags += 0x04 # Hide progress dialogs
$copyFlags += 0x10 # Overwrite existing files

$destinationFolder.CopyHere($zipFile.Items(), $copyFlags)

Source du crédit https://github.com/hashicorp/best-practices/blob/master/packer/scripts/windows/install_windows_updates.ps1#L12-L22

Cela ne fonctionne pas avec l'édition "principale" de Windows. Si possible, mettez à niveau vers powershell 5 et utilisez Expand Archive car c'est beaucoup plus simple. 

3
spuder

L'installation Write-Zip a peut-être été effectuée de manière incorrecte. Une modification manuelle incorrecte du paramètre d'environnement PSModulePath peut provoquer:

Mauvaise valeur (d'origine):

PSModulePath = %SystemRoot%\system32\WindowsPowerShell\v1.0\Modules\;C:\Program Files (x86)\PowerShell Community Extensions\Pscx3\;C:\Program Files\Intel\

Bonne valeur (qui a résolu le problème):

PSModulePath = C:\Program Files (x86)\PowerShell Community Extensions\Pscx3\;%SystemRoot%\system32\WindowsPowerShell\v1.0\Modules\;C:\Program Files\Intel\
0
Skylynx

Si vous pouvez effectuer une mise à niveau vers PowerShell V5 ( https://www.Microsoft.com/en-us/download/details.aspx?id=50395 ), il les a en natif. https://richardspowershellblog.wordpress.com/2014/10/25/powershell-5-Zip-and-unzip/

Pour PowerShell version 4, vous pourrez peut-être utiliser cette recherche http://www.powershellgallery.com/items?q=Zip&x=0&y=0 . Cela ressemble également à faire ce que vous recherchez: https://www.powershellgallery.com/packages/Microsoft.PowerShell.Archive/1.0.1.0

Pour installer les modules, vous devez taper:

install-module -name <module name>
  • powershellgallery.com est un site gratuit à télécharger. S'il vous plaît vérifier et comprendre le module avant de l'exécuter.

J'espère que ça aide ... Merci Tim.

0
Tim Haintz