Когда вы задаете параметру позицию перед обязательным, это не обязательно , но ожидается , что первый вход будет вашим необязательным параметром. Чтобы ваш второй пример работал, вам просто нужно удалить ссылку на позицию для необязательного параметра. Конечно, тогда Required
будет первым параметром позиции или 0
.
Function Test {
param(
[Parameter()]
[string]$Optional,
[Parameter(Position=0, Mandatory=$true)]
[string]$Required
)
Process {
Write-Host $Required
if ($PSBoundParameters.ContainsKey('Optional')) {
Write-Host $Optional -ForegroundColor Cyan
}
}
}
Я добавил некоторые выходные данные и удалил значение по умолчанию для параметра Optional
, чтобы вы могли видеть, что происходит.
Если вы не хотите называть необязательный параметр, вы даете ему позицию выше, чем обязательные параметры.
Function Test {
param(
[Parameter(Position=1)]
[string]$Optional,
[Parameter(Position=0, Mandatory=$true)]
[string]$Required
)
Process {
Write-Host $Required
if ($PSBoundParameters.ContainsKey('Optional')) {
Write-Host $Optional -ForegroundColor Cyan
}
}
}
О дополнительных параметрах функций