Zipper les fichiers avec distance PowerShell-processus de démarrage et Invoke-commande
-
27-10-2019 - |
Question
Je veux être en mesure de distance dans un système et des fichiers ZIP ou dézipper là-bas et que le signal de processus quand il est terminé. travaux de démarrage processus avec le paramètre -wait pour exécuter 7z.exe de manière synchrone PowerShell. Lorsque je tente de combiner avec Invoke-commande pour exécuter la même commande à distance, il ne respecte pas le paramètre d'attente et je crois qu'il est en train de tuer le processus car il retourne produit rapidement et jamais un fichier zip.
[string]$sevenZip = "C:\Program Files\7-zip\7z.exe"
[Array]$arguments = "a", $zipFilename, $dirToZip;
"Starting $sevenZip with $arguments"
Start-Process $sevenZip "$arguments" -Wait
#blocks and waits for zip file to complete
J'ai d'abord essayé le PSCX écriture zip et expand-archives, mais ce dernier n'est pas compatible avec la configuration .NET 4.0 64 bits. Alors maintenant, je suis en train d'appeler 7z.exe 64 bits via la ligne de commande. Je ne reçois pas d'erreurs. PowerShell signale le travail en cours d'exécution, puis l'état complet, et aucun fichier zip est produit.
Invoke-Command -ComputerName localhost -FilePath 'C:\Scripts\ZipIt.ps1' -ArgumentList 'd:\TestFolder','d:\promote\TestFile.7z' -AsJob
apprécierais toute aide ou pointeurs.
Merci, Gregory
La solution
depuis le démarrage processus sera utilisé de manière synchrone ici, je vous conseille d'éviter et il suffit d'utiliser l'exécutable 7z.exe
:
$sevenZip = "C:\Program Files\7-zip\7z.exe"
&$sevenZip a $zipFileName $dirToZip
Cela va bloquer naturellement votre script jusqu'à ce que 7zip termine sa tâche.
Autres conseils
Utilisation 7z.exe serait directement faire l'affaire. Si vous vous trouvez besoin Décompressez un fichier protégé par mot, vous pouvez utiliser:
$sevenZip = "C:\Program Files\7-zip\7z.exe"
&$sevenZip e -y "-o$dirToUnZip" -psomepassword $dirToUnZip\$zipFileName