我有一个已构建并存储在 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
这是另一种没有 Invoke-Expression
但有两个变量(command:string and parameters: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
也适用于我,例如这有效
$cmd = '& 7z.exe a -tzip "c:\temp\with space\test2.zip" "C:\TEMP\with space\changelog"'
Invoke-Expression $cmd
PS 我通常更喜欢使用参数数组的方式,因为以编程方式编写比为 Invoke-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
iex
是 Invoke-Expression
的别名,因此您可以这样做:
iex $cmd1
完整列表:访问 https://ss64.com/ps/ 了解更多 Powershell
内容。
祝你好运...
'C:\Program Files\7-zip\7z.exe'
,我可以执行 7z 。可执行程序。
不定期副业成功案例分享
$path=C:\blah
和& $path\test.exe blah1
。$path="C:\Windows\System32\inetsrv"; & "$path\appcmd"
invoke-expression
需要一个字符串,而&
可以有多个strings
。