ChatGPT解决这个技术问题 Extra ChatGPT

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

我有一个已构建并存储在 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
这不只是'&'象征? stackoverflow.com/questions/22074507/…

Z
Zombo

这是另一种没有 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 构建表达式更容易。


这太棒了。它现在开始融合在一起。我可以只使用 $variable 而不是 'c:\temp\with space\test1.zip' 吗?我需要把它放在“”还是“”?
喷溅似乎也一样:& $cmd @prm 但我很好奇为什么会这样
这不起作用:$path=C:\blah& $path\test.exe blah1
@RomanKuzmin 它有效! $path="C:\Windows\System32\inetsrv"; & "$path\appcmd"
invoke-expression 需要一个字符串,而 & 可以有多个 strings
A
Aakash

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

祝你好运...


告诉我术语 '7z.exe a -tzip c:\arc_logs\site-host-at-web1-100827.zip c:\inetpub\logs\logfiles\w3svc1\u_ex100827.log' 未被识别为cmdlet、函数、脚本文件或可运行的程序。检查名称的拼写,或者如果包含路径,请验证路径是否正确并重试。在 :line:14 char:1 + & <<<< $cmd1
@特拉维斯:哎呀。如果没有 args,则 & 符号有效。我用您的命令的解决方案更新了帖子。
我之前尝试过调用表达式,但没有奏效。它吐出错误:错误的数字常量:7. At :line:1 char:2 + 7z <<<< .exe a -tzip c:\arc_logs\site-host-at-web1-100827.zip c:\ inetpub\logs\logfiles\w3svc1\u_ex100827.log 它几乎似乎是在尝试评估它而不是执行它。
@Travis:可能是 7z.exe 不在您的路径上。验证它是否在路径上和/或尝试在表达式中为可执行文件提供完整路径名。
@Travis:我刚刚在我自己的系统上确认 7z.exe 给出了你描述的错误,只是从命令提示符输入,但是使用 7z.exe 的完整路径(对我来说,它是 'C:\Program Files\7-zip\7z.exe',我可以执行 7z 。可执行程序。