从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-Expression
expression式更容易。
尝试用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