Powershell - 将多个参数传递给Invoke-Command

时间:2016-10-04 03:37:24

标签: powershell invoke-command

我正在尝试编写一个单行程序来远程利用netbackup的一些功能。我知道如何使用-args [0]和[1]在最后使用重复参数将参数传递给Invoke Command。我正在努力实现的一个例子:

CC =国家代码(由于命名惯例而重复

SS =网站(由于命名惯例而重复)

Invoke-Command -ComputerName RemoteServer -ScriptBlock {& "C:\Program Files\Veritas\NetBackup\bin\admincmd\bpplinfo.exe" CC0SITE_VMW_BRON -set -L -M CC0SITEb0100d0a.s0SITE.CC.DOMAIN.COM} 

获取用户输入并声明参数后,似乎没有传递给invoke-command

Invoke-Command -ComputerName RemoteServer -ScriptBlock {& "C:\Program Files\Veritas\NetBackup\bin\admincmd\bpplinfo.exe" $args[0]0$args[1]_VMW_BRON -L -M $args[0]0$args[1]b0100d0a.s0$args[1].$args[0].DOMAIN.com} -Args $CCode, $Site

2 个答案:

答案 0 :(得分:5)

在scriptblock中使用 param($ val1,...)来传递参数。

Invoke-Command -ComputerName 'SERVERNAME' -ScriptBlock {
param($argument1, $argument2) #<--- this is required!
 write-host $CCode
 write-host $Site
} -ArgumentList ($argument1, $argument2)

可以在Invoke-Command cmdlet的ArgumentList(别名Args)部分找到更多信息和语法。

答案 1 :(得分:0)

您可能会对扩展变量的方式出现问题,因此可能会出现args未正确传递,当我调试时我只是使用 write 测试输出。例如:

Invoke-Command -ComputerName localhost -ScriptBlock {write "C:\Program Files\Veritas\NetBackup\bin\admincmd\bpplinfo.exe CC0SITE_VMW_BRON -set -L -M CC0SITEb0100d0a.s0SITE.CC.DOMAIN.com"}
Invoke-Command -ComputerName localhost -ScriptBlock {write "C:\Program Files\Veritas\NetBackup\bin\admincmd\bpplinfo.exe $($args[0])0$($args[1])_VMW_BRON -set -L -M $($args[0])0$($args[1])b0100d0a.s0$($args[1]).$($args[0]).DOMAIN.com"} -Args "CC", "SITE"