Командлет Powershell C # с наборами параметров с одинаковым подмножеством параметров - PullRequest
0 голосов
/ 20 сентября 2018

Я определил следующие наборы параметров в MyCustomCmdlet с набором параметров по умолчанию как два :

    [Parameter(Mandatory = true, ParameterSetName = one)]
    [Parameter(Mandatory = true, ParameterSetName = two)]
    [Parameter(Mandatory = true, ParameterSetName = three)]
    [Parameter(Mandatory = true, ParameterSetName = four)]
    [ValidateNotNullOrEmpty]
    [Alias("a")]
    public string A { get; set; }

    [Parameter(Mandatory = true, ParameterSetName = two)]
    [ValidateNotNullOrEmpty]
    [Alias("b")]
    public string B { get; set; }

    [Parameter(Mandatory = true, ParameterSetName = three)]
    [SupportsWildcards]
    [ValidateNotNullOrEmpty]
    [Alias("c")]
    public string C { get; set; }


    [Parameter(Mandatory = true, ParameterSetName = four)]
    [ValidateNotNullOrEmpty]
    [Alias("d")]
    public string D { get; set; }


    [Parameter]
    [ValidateNotNullOrEmpty]       
    public string E{ get; set; }

    [Parameter]
    [ValidateNotNullOrEmpty]
    public string F { get; set; }

Во время отладки я получаю ожидаемое количество наборов параметров, т.е. 4 со следующими параметрами:

1.ParameterSetName: один Параметры: A, E, F

2.ParameterSetName: два параметра: A, B, E, F

3.ParameterSetName: три параметра:A, C, E, F

4.ParameterSetName: четыре параметра: A, D, E, F

Однако, когда я выполняю:

MyCustomCmdlet -A или MyCustomCmdlet -A -E -F

Я получаю сообщение об ошибке, требуется обязательный параметр B, который является частью набора параметров по умолчанию.

  1. Может кто-нибудь помочь мне разобраться в этом поведении?
  2. Как выполнить командлет, используя набор параметров "one"

1 Ответ

0 голосов
/ 20 сентября 2018

PowerShell будет пытаться разрешить ParameterSet на основе данной команды и не будет пытаться разрешить нестандартный ParameterSet, если только значение по умолчанию не разрешается с текущими входными данными.В вашем сценарии ParameterSet 'two' является значением по умолчанию, а параметр A является частью этого ParameterSet, поэтому логически это то, что PowerShell предполагает, что вы нацеливаетесь, поскольку входные данные все еще действительны для него.Если вы хотите предоставить параметр A самостоятельно, вам нужно создать набор параметров с включенным только параметром A, и это должно быть по умолчанию (ParameterSet 'one' в вашем примере).

E и F делаютне определено свойство ParameterSet, поэтому по умолчанию их ParameterSet установлен на ParameterSet.AllParameterSets, поэтому повторное включение этих двух полей действительно для набора по умолчанию, поэтому PowerShell по-прежнему предполагает, что вы пытаетесь это сделать.

Кроме того, PowerShell нечувствителен к регистру, поэтому вам не нужно добавлять псевдонимы к своим параметрам с использованием строчных эквивалентов (если это типичный сценарий)

...