Использование Invoke-Command от Powershell для вызова командного файла с аргументами - PullRequest
8 голосов
/ 17 декабря 2011

Я хочу использовать Powershell для вызова командного файла на удаленных машинах. Этот пакетный файл имеет аргументы. Вот что у меня есть:

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

Invoke-Command -computername $server {$script + ' ' + $args}

После небольшого поиска я обнаружил, что функция Invoke-Command выполняет свой скрипт-блок в совершенно новом процессе, поэтому вы не можете помещать в него переменные (они не будут расширены). Вот для чего нужен тег -ArgumentList. Поэтому я попробовал это вместо ...

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

Это тоже не сработало ... мой пакетный скрипт говорит мне, что ему не передаются никакие аргументы. Я не могу найти ничего, что прямо говорит об этом, но похоже, что параметр -ArgumentList работает только для скриптов Powershell (он не будет передавать их в пакетный скрипт).

Есть идеи, как использовать Invoke-Command для вызова командного файла с аргументами?

Ответы [ 2 ]

6 голосов
/ 17 декабря 2011

Когда вы передаете список аргументов в блок скриптов, попробуйте «получить их», используя директиву PARAM.Например:

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

или вы можете просто использовать автоматическую переменную $ args:

Invoke-Command -computername $server {\\fileshare\script.cmd $args} -ArgumentList "FirstArgument"
3 голосов
/ 17 декабря 2011

Аргументы будут переданы в качестве аргументов в блок скриптов, а не напрямую в ваш 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)]), это синтаксическая ошибка

...