POWERSHELL - определять имя набора параметров по умолчанию ТОЛЬКО если указан параметр - PullRequest
0 голосов
/ 14 января 2020

У меня есть этот код здесь (я упростил):

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' Я даю параметр без указания набора.

Как мне поступить?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...