Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows 使用Powershell';s Invoke命令调用带有参数的批处理文件_Windows_Powershell_Batch File_Cmdlets_Invoke Command - Fatal编程技术网

Windows 使用Powershell';s Invoke命令调用带有参数的批处理文件

Windows 使用Powershell';s Invoke命令调用带有参数的批处理文件,windows,powershell,batch-file,cmdlets,invoke-command,Windows,Powershell,Batch File,Cmdlets,Invoke Command,我想使用Powershell在远程计算机上调用批处理文件。此批处理文件具有参数。以下是我目前掌握的情况: $script = "\\fileshare\script.cmd" $server = $args[0] $args [string]::join(',',$args[1 .. ($args.count-1)]) Invoke-Command -computername $server {$script + ' ' + $args} 经过一点搜索,我发现Invoke命令函数在一个全新的

我想使用Powershell在远程计算机上调用批处理文件。此批处理文件具有参数。以下是我目前掌握的情况:

$script = "\\fileshare\script.cmd"
$server = $args[0]
$args [string]::join(',',$args[1 .. ($args.count-1)])

Invoke-Command -computername $server {$script + ' ' + $args}
经过一点搜索,我发现Invoke命令函数在一个全新的进程中运行它的scriptblock,因此不能将变量放入其中(它们不会被扩展)。这就是-ArgumentList标记的作用。所以我尝试了这个

Invoke-Command -computername $server {\\fileshare\script.cmd} -ArgumentList "FirstArgument"
那也没用。。。我的批处理脚本告诉我它没有被传递任何参数。我找不到任何明确说明这一点的内容,但-ArgumentList参数似乎只适用于Powershell脚本(它不会将它们提供给批处理脚本)


您知道如何使用Invoke命令调用带有参数的批处理文件吗?

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

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


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

当你把参数列表传递给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"

谢谢你做到了!这甚至是它在technet文档中为Invoke命令所说的,所以我有点惭愧,因为我自己无法理解它!关于$args的这一点很有帮助,这段代码旨在复制Perl的“shift”函数。它似乎不会对我造成编译器错误,并按预期工作$server=$args[0]$args[string]::join(“,”,$args[1..($args.count-1)])哎呀,当我将“=”粘贴到问题中时,不知怎的从第二行删除了它。我可以使用命名参数吗?有样品吗?
Invoke-Command -computername $server {\\fileshare\script.cmd $args} -ArgumentList "FirstArgument"