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
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
.
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