У меня есть этот код здесь (я упростил):
Enum Region {
AU
BE
BR
CA
}
Function Get-AccByCountry
{
[CmdletBinding(DefaultParameterSetName='With_Specific_Countries')]
PARAM (
[Parameter(Mandatory=$false,
ParameterSetName='With_Specific_Countries')]
[Region[]]
$Regions,
[Parameter(Mandatory=$false,
ParameterSetName='Without_Specific_Countries')]
[Region[]]
$NotRegions
)
#BEGIN{}
PROCESS
{
Write-Verbose -Message "Starting global process"
IF($Regions){
foreach($r in $Regions){
[String]$r = $r
Get-AccByCountryLocalized $r -Verbose
}
}ELSEIF($NotRegions){
foreach($PR in [Enum]::GetValues([type]"Region")){
[String]$PR = $PR
IF($NotRegions -notcontains $PR)
{
$PR
Get-AccByCountryLocalized $PR -Verbose
}
}
}ELSE{
Get-AccByCountryGlobal -Verbose
}
}
#END{}
}
Таким образом, я могу вызвать Get-AccByCountry либо без указания параметров, с указанием регионов, с регионов, которые я не хочу указывать (3 возможности ).
Эти 3 вызова работают:
Get-AccByCountry
Get-AccByCountry -Region AU,BE
Get-AccByCountry -NotRegions AU,BE
Но когда я пытаюсь:
Get-AccByCountry AU,BE
Это не работает! Это дает мне эту ошибку (по-французски):
Get-AccByCountry : Impossible de trouver un paramètre positionnel acceptant l'argument « System.Object[] ».
Au caractère Ligne:1 : 1
+ Get-AccByCountry CA,AU
+ ~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidArgument : (:) [Get-AccByCountry], ParameterBindingException
+ FullyQualifiedErrorId : PositionalParameterNotFound,Get-AccByCountry
Я указал DefaultParameterSetName, но это не учитывается.
Я хочу, чтобы моя функция каждый раз принимала набор 'With_Specific_Countries' Я даю параметр без указания набора.
Как мне поступить?