1

我正在试图调用命令但将路径作为参数传递给 exe

eg:我想接受这个命令

powershell Invoke-Command -ComputerName localhost -ScriptBlock { param($command ) C:\windows\system32\getmac.exe /$command } -ArgumentList ?

并将其翻译成这样的形式

powershell Invoke-Command -ComputerName localhost -ScriptBlock { param($path, $command ) $path\getmac.exe /$command } -ArgumentList C:\windows\system32,?

我尝试了各种引用、& 和其他扭曲方式,但无法让它发挥作用。上述尝试导致

表达式或语句中出现意外的标记“\getmac.exe”。在行:1 字符:97

(我真的不想在 localhost 上调用 getmac,这是可运行的、如此精炼的版本)

4

2 回答 2

7

试试这个选项。它向我展示了对cscript.exe.

C:\>powershell.exe Invoke-Command -ComputerName localhost -ScriptBlock { param($path, $command ) cmd /c $path $command } -args '"C:\windows\system32\cscript.exe"','"/?"'

我尝试使用其他选项&,然后使用路径和参数,它给了我丢失的}异常。然后使用cmd /c而不是&内部脚本块解决了这个问题。

于 2013-09-18T02:53:31.197 回答
1

Powershell 不会以这种方式将字符串解析为命令。例如,如果你这样做:

$path="C:\Windows\System32"
$path\getmac.exe

你会得到同样的错误。解决此问题的技巧是使用调用运算符&

&$path\getmac.exe

或者在您的示例中,像这样(另请注意,对于传递给 powershell 可执行文件的命令,您必须将其包装在 scriptblock 大括号中):

powershell -command {Invoke-Command -ComputerName localhost -ScriptBlock { param($path, $command ) &$path\getmac.exe /$command } -ArgumentList C:\windows\system32,?}
于 2013-09-18T05:16:11.720 回答