Powershell 如何支持带有通配符的枚举参数

Powershell 如何支持带有通配符的枚举参数,powershell,Powershell,我想在PowerShell函数中声明一个参数,用于执行以下操作: 将可能的值限制在有限的范围内 允许多个值(但不允许重复),如标志 可能值的“支持”选项卡完成 允许使用通配符 对于前3个需求,我可以使用一个简单的[ValidateSet('this'、'that'、'other')]参数来实现: My-Command -MyParameter this, that 例如,假设我有以下功能: function Resolve-ProtocolToDefaultPort { [Cmdlet

我想在PowerShell函数中声明一个参数,用于执行以下操作:

  • 将可能的值限制在有限的范围内
  • 允许多个值(但不允许重复),如标志
  • 可能值的“支持”选项卡完成
  • 允许使用通配符
  • 对于前3个需求,我可以使用一个简单的
    [ValidateSet('this'、'that'、'other')]
    参数来实现:

    My-Command -MyParameter this, that
    
    例如,假设我有以下功能:

    function Resolve-ProtocolToDefaultPort {
        [Cmdletbinding()]
        param (
            [Parameter(ParameterSetName='ByProtocol', Mandatory)]
            [ValidateSet('FTP', 'FTPS', 'SFTP', 'HTTP', 'HTTPS')] 
            [string[]] $Protocol
        )
    
        foreach ($curProtocol in $Protocol) {
            switch($curProtocol) {
                { 'HTTP'  -like $_ } { return 80  }
                { 'HTTPS' -like $_ } { return 443 }
                # ...
            }
        }
    }
    
    我如何支持此用例:

    PS > Resolve-ProtocolToDefaultPort -Protocol HTT*
    80
    443
    

    在保留制表符完成和参数验证的同时?

    请查看通配符参数。@Manu我不知道这个属性。不幸的是,它没有达到预期的效果<代码>Resolve ProtocolToDefaultPort:无法验证参数“Protocol”上的参数。参数“HTT*”不属于ValidateSet属性指定的集合“FTP、SFTP、FTPS、HTTP、HTTPS”。请提供集合中的参数,然后重试该命令。请查看通配符参数。@Manu我不知道该属性。不幸的是,它没有达到预期的效果<代码>Resolve ProtocolToDefaultPort:无法验证参数“Protocol”上的参数。参数“HTT*”不属于ValidateSet属性指定的集合“FTP、SFTP、FTPS、HTTP、HTTPS”。请提供集合中的参数,然后重试该命令。