Exécution d'une commande stockée dans une variable de PowerShell
j'ai une commande que j'ai compilée et stockée dans une variable dans PowerShell. Cette commande fonctionne si je fais un write-host et copie et colle dans une fenêtre standard cmd.exe
.
comment exécuter cette commande depuis l'intérieur de mon script?
j'ai essayé plusieurs combinaisons d'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"
C'est ce que la variable ressemble à si elle est imprimée à l'écran:
7z.exe a -tzip c:arc_logssite-host-at-web1-100827.zip c:inetpublogslogfilesw3svc1u_ex100827.log
2 réponses
Voici encore une autre façon sans Invoke-Expression
mais avec deux variables
(commande:string et paramètres:array). Il fonctionne très bien pour moi. Supposer
7z.exe
est dans le chemin du 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 seuls les paramètres sont variables alors cela fera
$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 pour moi, trop, p.ex. cela fonctionne
$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 habituellement le avec un tableau de paramètres, car il est plus facile de
composez de manière programmatique que pour construire une expression pour Invoke-Expression
.
essayez d'invoquer votre commande avec invoke-expression
.
invoke-expression $cmd1
voici un exemple de travail sur ma machine:
$cmd = "& 'C:\Program Files-zipz.exe' a -tzip c:\temp\test.zip c:\temp\test.txt"
invoke-expression $cmd