Я хочу написать функцию в пользовательском модуле powershell, который может определять некоторые переключатели.
Функция должна вызываться либо без переключателя, либо с одним переключателем.Несколько переключателей не допускаются.
Пример:
Get-Foo -Value "text" # Should return "text"
Get-Foo -Value "2019-01-01T00:00:00Z" -AsDate # Should return the value as date
Get-Foo -Value "42" -AsInteger # Should return 42 as integer
Get-Foo -Value "xxx" -AsDate -AsInteger # Should fail
Для поддержки этих случаев я играю с наборами параметров:
function Get-Foo{
param(
[Parameter(Mandatory=$true)]
[string]$Value,
[Parameter(ParameterSetName='AsDate')]
[Switch]$AsDate,
[Parameter(ParameterSetName='AsInteger')]
[Switch]$AsInteger
)
switch ($PsCmdlet.ParameterSetName) {
"AsDate" {
[datetime]::Parse($Value)
}
"AsInteger" {
[int]::Parse($Value)
}
"__AllParameterSets" {
$Value
}
}
}
Однако этоне работает, как ожидалось.Проход одного из двух выключателей работает.Передача двух переключателей завершается неудачно (но это предусмотрено).
PОтключение переключателя вообще не удается, поскольку он не может разрешить набор параметров.
Как это исправить?