#powershell
#powershell
Вопрос:
Я не уверен, возможно ли это, но у меня есть параметр, который используется в трех разных наборах параметров, и в зависимости от того, в каком наборе он находится, тип будет другим. Хотя приведенный ниже фрагмент синтаксически корректен, когда я пытаюсь его использовать, я получаю сообщение об ошибке. Я делаю нечто подобное в другой функции, где мой validateset представляет собой набор определенных мной классов, которые могут вводить в заблуждение, поскольку они определены в модуле powershell, а не в «правильных» типах .Net.
[parameter(Mandatory = $false, ParameterSetName = 'string')]
[parameter(Mandatory = $false, ParameterSetName = 'integer')]
[parameter(Mandatory = $false, ParameterSetName = 'number')]
[ValidateSet([string],[int],[decimal])]
$default,
Результирующая ошибка
Cannot validate argument on parameter 'default'. The argument "black" does not belong to the set "string,int,decimal" specified by the ValidateSet attribute. Supply an argument that is in the set and then try the command again.
Ответ №1:
ValidateScript
Вместо этого используйте атрибут:
[ValidateScript({$_ -is [string] -or $_ -is [int] -or $_ -is [decimal]})]
[object]$default,
Комментарии:
1. Хороший вызов, я тоже думал об этом, нужно ли тогда определять параметр как [object] или это может быть просто что угодно
2. Вы можете удалить
[object]
ограничение типа (нетипизированные параметры по умолчанию в[object]
любом случае), но вы не можете определить его как «что угодно» 🙂 хитрость здесь в том[string]
,[int]
что и[decimal]
все вытекают из[object]
, прямо или косвенно3. Большое спасибо!