2017-02-19 4 views
-1
function foo 
{ 
    param(
     [parameter(Mandatory=$true)] 
     [ValidateSet('Test1','Test2','Test3')] 
     [String]$ChooseOne= 'Test1', 
    ) 

do xxxxxxxxxxxxxxxx 
{ 

foo -ChooseOne Test9 

Я работаю над функцией powershell с набором требуемых параметров. Множество Validate прекрасно работает, однако, как Validate Set есть .. если опция вводится, что не один из перечисленных вариантов .. Я получаю сообщение об ошибке, как показано ниже:Ошибка в PowerShell ValidateSet - ошибка Действие для установки переменной по умолчанию?

foo: Cannot validate argument on parameter 'ChooseOne'. The argument "Test9" does not belong to the set "Test1,Test2,Test3" specified by the ValidateSet attribute. Supply an argument that is in the set and then try the 
command again. 
At line:1 char:1 
+ foo 
+ ~~~~~~~~~~~~~ 
    + CategoryInfo   : InvalidData: (:) [foo], ParameterBindingValidationException 
    + FullyQualifiedErrorId : ParameterArgumentValidationError,foo 

Есть ли способ есть действие с ошибкой, чтобы установить поврежденную переменную в значение по умолчанию, которое было определено ранее?

Так что в этом случае было бы по умолчанию $ChooseOne к «Test1»

+1

Существует множество расширенных функциональных примеров, в которых используются параметры и их различные варианты. Пример: http://stackoverflow.com/questions/39154887/set-a-default-value-for-variable-in-powershell, а также [ссылка TechNet] (https://social.technet.microsoft.com/wiki/ содержимое/статьи/15994.powershell-advanced-function-parameter-attributes.aspx) – user4317867

ответ

-2

Если я значение не является обязательным, он будет установлен в состояние по умолчанию, как хотел.

[parameter(Mandatory=$false)] 
+0

так что вопрос в этом вопросе? – 4c74356b41

0

В вашем вопросавы явно передать недопустимый аргумент вашей проверке набора ограниченные -ChooseOne параметра, а затем спросить:

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

Ответ: нет, и по уважительной причине: если вы определяете параметр только принимать аргумент из заданного набора допустимых значений, вы явно хотите предотвратить пропускание неприемлемого так что вы хотите PowerShell сообщить об ошибке.

Если вы хотите принять недопустимые значения, но спокойно игнорировать их - который, кажется, как плохую идею - не использовать проверку атрибута от параметра и вместо обрабатывать проверки - и бесшумный возврат к значению по умолчанию - в функции корпус.

Как и в сторону: Там нет смысла в определении значения в по умолчанию для параметра, который помечен как обязательной.


В собственном answer вы изменений предпосылки вашего вопроса не передавая любое значение для вашего параметра -ChooseOne.

Создание параметра не обязательным, т.е. необязательно - который является по умолчанию, кстати, никакого явного [parameter(Mandatory=$false)] нужно - на самом деле не имеет какое-либо значение по умолчанию объявлен для этого эффекта, если аргумент не передается - это самая точка значения по умолчанию.