我试图调用命令撕裂我的头发但是将路径作为参数传递给exe
例如: 我想接受这个命令
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 char:97
(我真的不想在localhost上调用getmac,这是可运行的SO推送版本)
答案 0 :(得分:7)
尝试此选项。它向我展示了cscript.exe
的帮助。
C:\>powershell.exe Invoke-Command -ComputerName localhost -ScriptBlock { param($path, $command ) cmd /c $path $command } -args '"C:\windows\system32\cscript.exe"','"/?"'
我尝试了使用&
的其他选项,然后尝试了路径和参数,这让我错过了}
异常。然后在scriptblock中使用cmd /c
而不是&
修复了问题。
答案 1 :(得分:0)
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,?}