Powershell: как правильно использовать ValueFromRemainingArguments?

#powershell-5.0 #positional-parameter

#powershell-5.0 #позиционный параметр

Вопрос:

Я следую официальному руководству Microsoft, чтобы определить один обязательный позиционный аргумент и любое количество оставшихся позиционных аргументов, которые могут последовать при использовании ValueFromRemainingArguments . Моя попытка:

 function main {
    Param(
        [String]
        [Parameter(Mandatory = $true, Position = 0)]
        $FOO,
        [String[]]
        [Parameter(Position = 1, ValueFromRemainingArguments)]
        $BAR
    )
    
    Write-Host mandatory arg: $FOO
    Write-Host additional args: $BAR

}

amp;main $args[0] $args
  

Когда я пытаюсь запустить скрипт, я получаю следующий вывод:

 PS C:ps_scripts> .script.ps1 foo bar bar2 bar3
mandatory arg: foo
additional args: foo bar bar2 bar3
  

Ожидаемый результат:

 PS C:ps_scripts> .script.ps1 foo bar bar2 bar3
mandatory arg: foo
additional args: bar bar2 bar3
  

Как получить желаемый результат?

Если я разделяю аргументы запятой:

 PS C:ps_scripts> .script.ps1 foo bar,bar2,bar3
  

вывод:

 PS C:ps_scripts> .script.ps1 foo bar,bar2,bar3
mandatory arg: foo
additional args: foo System.Object[]
  

Комментарии:

1. Args — это автоматическая переменная, которая содержит все аргументы. Итак, вы буквально вызываете main, предоставляя первый аргумент foo и все аргументы bar .

Ответ №1:

Последняя строка должна быть изменена следующим образом:

 amp;main $args[0] $args[1]