Question

Je suis en train d'exécuter une commande Powershell pour appeler 7-Zip zip un dossier en utilisant la commande suivante:

$command = $SevenZip + " a " + $targetDirForZip + $GetDateName + "_" + $dir.Name + ".7z " + $dir.FullName
Invoke-Expression $command

Les variables sont introduites dans la commande $ sont déjà définis et SevenZip $ est "c: \ Program Files \ 7-Zip \ 7z.exe"

Ce ne fonctionne pas et je suis en train de travailler la meilleure façon d'appeler 7-Zip de Powershell. Idées?

Était-ce utile?

La solution

J'ai eu le même problème auparavant. Ceci est du code (presque) directement à partir d'un script de sauvegarde que j'utilise actuellement:

[string]$pathToZipExe = "C:\Program Files\7-zip\7z.exe";
[Array]$arguments = "a", "-tgzip", $outputFilePath, $inputFilePath;

& $pathToZipExe $arguments;

J'ai pris l'habitude d'utiliser un tableau d'arguments avec l'opérateur d'appel, il semble être plus robuste que d'autres méthodes.

Autres conseils

Vous n'avez pas besoin d'utiliser Invoke-Expression il suffit d'utiliser l'opérateur d'appel (appel) & pour appeler une chaîne qui nomme une commande à exécuter. Notez que vous souhaitez conserver les paramètres séparés dans ce cas, à savoir la chaîne SevenZip doit juste être le chemin vers le fichier EXE par exemple:.

&$SevenZip a "$targetDirForZip$GetDateName_$($dir.Name).7z" $dir.FullName

Vous ne fait pas besoin Invoke-Expression. Vous pouvez simplement appeler la commande en utilisant l'esperluette tels que:

&$Command

Mais il y a aussi la cmdlet Start-Process qui pourrait être mieux pour ce que vous essayez de faire. En exécutant la commande en tant que chaîne ci-dessus, vous êtes sujette à des erreurs si le SevenZip $ contient des espaces et ne sont pas cotés. Au lieu de cela, j'utiliser:

Start-Process $SevenZip "...rest..."

Je suis tombé sur ce problème aussi bien, voici ma solution était.

invoke-expression "& 'C:\Program Files\CIESetupClient\Staging\ffd4bc34-52c1-43e7-92d4-93d2f59d7f52\vstor_redist.exe' /q /norestart /log c:\Logs\VSTOR_Redist.log "

J'ai pu quitter mes paramaters en dehors des guillemets simples pointant vers mon exe, je pense que ce qui est probablement la meilleure façon d'appeler un exe avec des paramètres à l'aide invoquer l'expression.

Laisse-moi deviner, il essaie d'invoquer "c: \ Program"?

Pas sûr de la syntaxe correcte pour le PS, mais vous aurez besoin de faire quelque chose de cet espace.

Travaux pour moi:

$command = "& ""$SevenZip""" + " a " + $targetDirForZip + $GetDateName + "_" + $dir.Name + ".7z " + $dir.FullName

Write-Host "Running: $command"

Invoke-Expression $command

Vous pouvez également utiliser les commandes MS-DOS à partir d'un script Windows PowerShell.

Je l'ai toujours aimé la commande START cmd.exe, qui vous permet de lancer une commande en parallèle.

Donc, pour commencer votre 7-zip, mettez la commande suivante dans votre script Powershell:

    cmd.exe /c start <your 7-zip command like in MS-DOS> 
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top