Укажите значение по умолчанию для обязательного параметра Cmdlet с помощью ValidateSet

Предполагая класс Cmdlet:

[System.Management.Automation.Cmdlet(System.Management.Automation.VerbsCommon.Get, "LogonToken")]
public class GetLogonToken : System.Management.Automation.Cmdlet
{

    // constructor
    public GetLogonToken()
    {
      // set default auth.
      this.Authentication = "secWinAD";
    }

    // addtional properties omitted

    [System.Management.Automation.Parameter(Position = 1, Mandatory = true)]
    [ValidateSet("secEnterprise", "secLDAP", "secWinAD")]
    public string Authentication
    {
      get { return authentication; }
      set { authentication = value; }
    }

    // setting authentication here has no effect either
    private string authentication;

    // addtional code omitted

}

Вызов командлета:

PS ..\bin\Debug> get-logontoken

cmdlet Get-LogonToken at command pipeline position 1
Supply values for the following parameters:
ServerName: SERVER
Authentication: <hit enter>
Username: USERNAME
Password: ********
Get-LogonToken : Cannot validate argument on parameter 'Authentication'. The
argument "" does not belong to the set "secEnterprise,secLDAP,secWinAD"
specified by the ValidateSet attribute. Supply an argument that is in the set
and then try the command again.At line:1 char:1
+ get-logontoken
+ ~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidData: (:) [Get-LogonToken], ParameterBindingValidationException
    + FullyQualifiedErrorId : ParameterArgumentValidationError,PsEnterprise.GetLogonToken

Как назначить значение по умолчанию для обязательного параметра, который использует ValidateSet?

1 ответ

Решение

Ты не можешь

Обязательный параметр должен иметь указанное значение. Нажатие Enter в приглашении означает, что вы даете пустую строку или ноль; ValidateSet не имеет к этому никакого отношения. Даже если проверки не было, значение по умолчанию не будет назначено нажатием Enter в этом приглашении.

Вы можете сделать его необязательным, а затем присвоить ему значение по умолчанию, но если вы не укажете его при вызове командлета, он будет использовать значение по умолчанию и не будет запрашивать.

Другие вопросы по тегам