2016-08-31 4 views
2

Предполагая, класс Cmdlet:питания значение по умолчанию для обязательного параметра командлета с ValidateSet

[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 

} 

Вызов Cmdlet:

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?

+0

Пожалуйста, исправьте опечатку в названии: 'manditory' – wOxxOm

ответ

2

Вы не можете.

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

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

+0

Я думаю, что сделать параметр необязательным, а затем предоставить значение по умолчанию в конструкторе - хороший вариант; он не показывает, что при завершении табуляции будут отображаться допустимые значения параметра 'authentication'. – craig

+0

@craig с использованием 'ValidateSet' должен допускать выполнение табуляции; Я не уверен, почему это не сработает. – briantist

+0

Закладка вкладки не работала с 32-разрядной или 64-разрядной версией оболочки или ISE. – craig