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
116
demandé sur Peter Mortensen 2010-08-29 03:05:58

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 .

156
répondu Roman Kuzmin 2014-07-15 07:49:45

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
26
répondu kbrimington 2010-08-29 01:04:24