12
votes

Invoke-expression avec EXE dans les fichiers de programme

J'essaie d'exécuter une commande PowerShell pour appeler 7-zip pour mentionner un dossier à l'aide de la commande suivante:

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


0 commentaires

7 Réponses :


4
votes

Vous n'avez réellement besoin d'une expression invoke. Vous pouvez simplement appeler la commande en utilisant l'AMPersand telle que: xxx

mais il y a aussi la cmdlet de processus de démarrage qui pourrait être mieux adaptée à ce que vous essayez de faire. En exécutant la commande en tant que chaîne ci-dessus, vous êtes sujets aux erreurs si le $ Sevenzip contient des espaces et n'est pas cité. Au lieu de cela, j'utiliserais: xxx


0 commentaires

1
votes

Permettez-moi de deviner, il essaie d'invoquer "C: \ Program"?

Pas sûr de la syntaxe correcte pour PS, mais vous devrez faire quelque chose à propos de cet espace.


0 commentaires

6
votes

Vous n'avez pas besoin d'utiliser Invoke-expression, utilisez simplement l'opérateur d'invocation (appel) & code> 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, c'est-à-dire que la chaîne Sevenzip devrait simplement être le chemin de l'EXE E.G.:

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


0 commentaires

25
votes

J'ai déjà eu le même problème. Ceci est 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;


0 commentaires

0
votes

fonctionne pour moi: xxx


0 commentaires

3
votes

J'ai également couru dans ce problème, voici ma solution.

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


0 commentaires

0
votes

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

J'ai toujours aimé la commande de démarrage de cmd.exe, ce qui vous permet de démarrer une commande en parallèle. p>

donc Pour démarrer votre 7-Zip, placez la commande suivante dans votre script PowerShell: P>

    cmd.exe /c start <your 7-zip command like in MS-DOS> 


1 commentaires

Cette réponse n'aide à rien de résoudre le problème