使用类动态获取列表时如何向'ValidateSet'添加值?

问题描述 投票:0回答:1

我有一个函数,我想使用

c:\names
中找到的文件名列表动态地为 Name 参数提供值,以便
tab
始终提供最新的名称。我已经弄清楚如何在课堂上做到这一点,但我也想做一些“聪明”的处理。如果用户提供
*
?
作为值,那么这也应该可以接受。我想本质上使用这些字符作为参数的“修饰符”。

以下是我所拥有的:

Function fooo{
    Param(
    [ValidateSet([validNames], "*", ErrorMessage = """{0}"" Is not a valid name")]
    #[ValidateSet([validNames], ErrorMessage = """{0}"" Is not a valid name")]           #'tab' works as expected here
    [string]$Name
    )
    if ($name -eq "*"){"Modifier Used, do something special insead of the usual thing"}
    $name
}

Class validNames : System.Management.Automation.IValidateSetValuesGenerator{
    [string[]] GetValidValues(){
        return [string[]] (Get-ChildItem -path 'C:\names' -File).BaseName
    }}

使用上面的

tab
不会自动完成Name参数的任何值,有时我什至会收到错误:

MetadataError: The variable cannot be validated because the value cleanup4 is not a valid value for the Name variable.

我可以提供值

*
到 Name 就好,我确实遇到了任何错误:

fooo -name *

#Modifier Used, do something special insead of the usual thing

我知道我可以在这里使用 switch 参数,而不是沿着这条路线走下去,我主要关心的是如何在

ValidNames
类提供的值之上添加附加值?比如:

...
[ValidateSet([validNames], "foo", "bar", "baz", ErrorMessage = """{0}"" Is not a valid name")]
...

我使用的是 PWS 7.4

powershell
1个回答
0
投票

您可以将传递

System.Management.Automation.IValidateSetValuesGenerator
实现类型与在
[ValidateSet()]
属性中字面枚举附加值结合起来。

  • 要么:使类型返回所有值。

  • 或者:直接在属性中枚举 all 值。

© www.soinside.com 2019 - 2024. All rights reserved.