使用Powershell的Invoke-Command来调用带有参数的batch file

我想使用Powershell来调用远程机器上的batch file。 这个batch file有参数。 以下是我到目前为止:

$script = "\\fileshare\script.cmd" $server = $args[0] $args [string]::join(',',$args[1 .. ($args.count-1)]) Invoke-Command -computername $server {$script + ' ' + $args} 

经过一番search,我发现Invoke-Command函数在一个全新的过程中运行它的脚本块,所以你不能把variables放在里面(它们不会被扩展)。 这就是-ArgumentList标签的用途。 所以我试着这个,而不是…

 Invoke-Command -computername $server {\\fileshare\script.cmd} -ArgumentList "FirstArgument" 

这也没有工作…我的批处理脚本告诉我,它没有被传递任何参数。 我找不到任何明确说明的东西,但它看起来像-ArgumentList参数只适用于Powershell脚本(它不会将它们馈送到批处理脚本)。

任何想法如何使用Invoke-Command调用带有参数的batch file?

将参数列表传递给scriptblock时,尝试使用PARAM指令“接收它们”。 喜欢这个:

 Invoke-Command -computername $server {PARAM($myArg) \\fileshare\script.cmd $myArg} -ArgumentList "FirstArgument" 

或者你可以使用$ args自动变量:

 Invoke-Command -computername $server {\\fileshare\script.cmd $args} -ArgumentList "FirstArgument" 

参数将作为参数传递给scriptblock,而不是直接传递给你的cmd。 你必须做:

 Invoke-Command {param($script,$arg1) &$script $arg1 } -computername $server -ArgumentList $script,"FirstArgument" 

要么

 Invoke-Command {&$args[0] $args[1] } -computername $server -ArgumentList $script,"FirstArgument" 

PS:我不知道你在做什么$args [string]::join(',',$args[1 .. ($args.count-1)]) ,这是一个语法错误