Quero fornecer uma lista de nomes permitidos para o name
parâmetro, para que o usuário possa tab
inseri-los. Eu criei o seguinte:
Param(
[ValidateSet([foo])]
[string]$Name
)
$name
Class foo : System.Management.Automation.IValidateSetValuesGenerator{
[string[]] GetValidValues(){
return [string[]] ("cat", "dog", "fish")
}}
É sugerido digitar .\myScript.ps1 -name
e depois não pressionar tab
nada. A execução .\myScript.ps1
retorna um erro:
Line |
3 | [ValidateSet([foo])]
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
| Unable to find type [foo].
Posso fazer essa configuração exata em um psm1
arquivo ou apenas como uma função padrão e funciona. Pensei em mover a classe para o topo do arquivo de script, mas isso não é permitido devido à param()
necessidade de ser a primeira linha.
Existe uma maneira de contornar esse problema? Estou no pwsh 7.4
Não há solução alternativa para o que você está tentando: um script do PowerShell com parâmetros que faz uso da
ValidateSetAttribute(Type valuesGeneratorType)
sobrecarga que também define oIValidateSetValuesGenerator
tipo herdado no mesmo arquivo.Você pode definir uma função no script e codificar seu código:
Use a
ValidateSetAttribute(params string[] validValues)
sobrecarga para avaliação em tempo de execução:Dot source a
IValidateSetValuesGenerator
classe herdada antes de chamar o script:Ou use um módulo como você já conhece.