从Powershell执行存储在variables中的命令

我有一个命令,我已经build立并存储在一个variables的权力shell。 这个命令可以工作,如果我做一个写主机和复制过去到一个标准的cmd.exe窗口。

我如何执行这个命令从我的脚本内?

我已经尝试了invoke-command或invoke-expression的几个组合,没有运气。

这是我如何build立variables:

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

如果它被打印到屏幕上,这就是variables的样子:

 7z.exe a -tzip c:\arc_logs\site-host-at-web1-100827.zip c:\inetpub\logs\logfiles\w3svc1\u_ex100827.log 

这是另一种没有Invoke-Expression但是有两个variables(command:string和parameters:array)。 它对我来说工作正常。 假设7z.exe在系统path中。

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

如果命令是已知的(7z.exe),只有参数是可变的,那么这将做

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

顺便说一句, Invoke-Expression带有一个参数也适用于我,例如,这个工程

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

PS我通常更喜欢参数数组的方式,因为编写程序比编写Invoke-Expressionexpression式更容易。

尝试用invoke-expression调用你的命令。

 invoke-expression $cmd1 

这是我的机器上的一个工作示例:

 $cmd = "& 'C:\Program Files\7-zip\7z.exe' a -tzip c:\temp\test.zip c:\temp\test.txt" invoke-expression $cmd