我想为参数提供一个允许的名称列表name
,以便用户可以tab
输入它们。我想出了以下几点:
Param(
[ValidateSet([foo])]
[string]$Name
)
$name
Class foo : System.Management.Automation.IValidateSetValuesGenerator{
[string[]] GetValidValues(){
return [string[]] ("cat", "dog", "fish")
}}
建议输入.\myScript.ps1 -name
然后不按任何内容。运行会返回错误:tab
.\myScript.ps1
Line |
3 | [ValidateSet([foo])]
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
| Unable to find type [foo].
我可以在文件中或仅将其作为标准函数进行精确设置psm1
,而且它可以正常工作。我曾考虑将类移至脚本文件的顶部,但由于param()
需要将其放在第一行,因此不允许这样做。
有办法解决这个问题吗?我在用 pwsh 7.4
对于您尝试的操作没有解决方法:带有参数的 PowerShell 脚本利用了重载
ValidateSetAttribute(Type valuesGeneratorType)
,并且还在IValidateSetValuesGenerator
同一文件中定义了继承类型。您可以在脚本中定义一个函数并对其进行点源:
使用
ValidateSetAttribute(params string[] validValues)
重载进行运行时评估:IValidateSetValuesGenerator
在调用脚本之前,点源继承类:或者使用您已经知道的模块。