执行存储在 PowerShell 变量中的命令

我有一个命令,我已经构建并存储在 PowerShell 中的一个变量中。如果执行 写主机并将其复制粘贴到标准 cmd.exe窗口中,则此命令可以工作。

如何在脚本中执行此命令?

我已经尝试了几次调用-命令或调用-表达式的组合,但都没有成功。

这就是我如何构建变量的:

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

如果将变量打印到屏幕上,它看起来是这样的:

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

尝试使用 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

iexInvoke-Expression化名,所以你可以这样做:

iex $cmd1

完整清单: 访问 https://ss64.com/ps/了解更多 Powershell内容。

祝你好运..。

这是另一种没有 Invoke-Expression但有两个变量的方法 (命令: string 和参数: array) 7z.exe在系统路径中。

$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对我也适用,例如: this works

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


Invoke-Expression $cmd

另外,我通常更喜欢使用参数数组的方式,因为它更容易 而不是为 Invoke-Expression生成表达式。