web-dev-qa-db-fra.com

Exécution d'une commande stockée dans une variable de PowerShell

J'ai construit et stocké une commande dans une variable de PowerShell. Cette commande fonctionne si je fais un Write-Host et que je copie/colle dans une fenêtre standard cmd.exe.

Comment puis-je exécuter cette commande à l'intérieur de mon script?

J'ai essayé plusieurs combinaisons Invoke-Command ou Invoke-Expression sans succès.

Voici comment j'ai construit la variable:

$cmd1 = $arcprg + $arcdir + "\" + $site1 + "-" + $hst + "-" + $yesterday + ".Zip " + $logpath1 + "u_ex" + $yesterday + ".log"

Voici à quoi ressemble la variable si elle est imprimée à l'écran:

7z.exe a -tzip c:\arc_logs\site-Host-at-web1-100827.Zip c:\inetpub\logs\logfiles\w3svc1\u_ex100827.log
133
Travis

Voici encore une autre manière sans Invoke-Expression mais avec deux variables (commande: chaîne et paramètres: tableau). Ça fonctionne bien pour moi. Supposons que 7z.exe se trouve dans le chemin système.

$cmd = '7z.exe'
$prm = 'a', '-tzip', 'c:\temp\with space\test1.Zip', 'C:\TEMP\with space\changelog'

& $cmd $prm

Si la commande est connue (7z.exe) et que seuls les paramètres sont variables, cela suffira.

$prm = 'a', '-tzip', 'c:\temp\with space\test1.Zip', 'C:\TEMP\with space\changelog'

& 7z.exe $prm

BTW, Invoke-Expression avec un paramètre fonctionne également pour moi, par ex. cela marche

$cmd = '& 7z.exe a -tzip "c:\temp\with space\test2.Zip" "C:\TEMP\with space\changelog"'

Invoke-Expression $cmd

P.S. Je préfère généralement le chemin avec un tableau de paramètres car il est plus facile de composer par programmation que de construire une expression pour Invoke-Expression.

176
Roman Kuzmin

Essayez d’appeler votre commande avec Invoke-Expression:

Invoke-Expression $cmd1

Voici un exemple de travail sur ma machine:

$cmd = "& 'C:\Program Files\7-Zip\7z.exe' a -tzip c:\temp\test.Zip c:\temp\test.txt"
Invoke-Expression $cmd
34
kbrimington