小编典典

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

all

我有一个已构建并存储在 PowerShell 变量中的命令。如果我执行Write-Host并将其复制并粘贴到标准cmd.exe窗口中,则此命令有效。

如何从我的脚本中执行此命令?

我尝试了几种 Invoke-Command 或 Invoke-Expression 的组合,但都没有成功。

这就是我构建变量的方式:

$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

阅读 168

收藏
2022-08-21

共1个答案

小编典典

这是另一种没有Invoke-Expression但有两个变量的方法(命令:字符串和参数:数组)。这对我来说可以。假设 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有一个参数也适用于我,例如这有效

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

Invoke-Expression $cmd

PS 我通常更喜欢使用参数数组的方式,因为以编程方式编写比为Invoke-Expression.

2022-08-21