Я пишу сценарий powershell, который имеет несколько параметров
param(
[Parameter(Mandatory=$true, Position=0)]
[ValidateSet('a', 'b', 'c', 'd')]
[string] $abcd,
[Parameter(Mandatory=$true)] [string] $mandatory1,
[Parameter(Mandatory=$true)] [string] $mandatory2,
[Parameter()] $optional1=$false,
[Parameter()] $optional2=$false,
[Parameter()] $defaulted1=256,
[Parameter()] $defaulted2=30,
[Parameter()] [string] $defaulted3='defaulted3',
[Parameter(ValueFromRemainingArguments=$true)] [string[]] $rest
)
Однако, когда я пытаюсь вызвать его, некоторые параметры присваиваются дополнительным / стандартным значениям вместо $ rest.
.\my-script `
-abcd a `
-mandatory1 value1 `
-mandatory2 value2 `
-optional1 value3 `
-optional2 value4 `
-rest `
foo `
bar `
baz
мой скрипт печатает
optional1 is value3
optional2 is value4
defaulted1 is bar
defaulted2 is baz
rest is foo
Таким образом, похоже, что Powershell предпочитает присваивать аргументы по позиции , даже если они имеют значения по умолчанию, вместо назначения ихValueFromRemainingArguments param.
Есть ли способ изменить это поведение и установить значение необязательного параметра только по имени?
Я пытался использовать Как указать непозиционный параметр в PowerShellscript? и непозиционные, необязательные параметры Powershell но либо я сделал это неправильно, либо он работает не так, как я думал.