Использование команды Invoke-Command Powershell для вызова пакетного файла с аргументами
Я хочу использовать PowerShell для вызова пакетного файла на удаленной машине. Этот пакетный файл имеет аргументы. Вот что у меня пока есть:
$script = "filesharescript.cmd"
$server = $args[0]
$args [string]::join(',',$args[1 .. ($args.count-1)])
Invoke-Command -computername $server {$script + ' ' + $args}
после небольшого поиска я обнаружил, что функция Invoke-Command запускает свой scriptblock в совершенно новом процессе, поэтому вы не можете поместить в него переменные (они не будут расширяться). Вот для чего предназначен тег-ArgumentList. Поэтому я попробовал это...
Invoke-Command -computername $server {filesharescript.cmd} -ArgumentList "FirstArgument"
это тоже не сработало... мой пакетный сценарий говорит мне, что никаких аргументов. Я не могу найти ничего, что явно говорит об этом, но похоже, что параметр-ArgumentList работает только на сценариях Powershell (он не будет передавать их в пакетный скрипт).
любые идеи, как я могу использовать Invoke-Command для вызова пакетного файла с аргументами?
2 ответов
когда вы передаете список аргументов в 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)])
, это синтаксическая ошибка