#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]