如何调用命令并将路径作为参数传递给命令

时间:2013-09-18 01:38:04

标签: powershell invoke-command

我试图调用命令撕裂我的头发但是将路径作为参数传递给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推送版本)

2 个答案:

答案 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,?}
相关问题