如何使用通配符支持枚举参数

时间:2017-11-09 11:09:52

标签: powershell

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

  1. 将可能的值限制为有限的集合
  2. 允许多个值(但没有重复项),例如flags
  3. 支持标签完成可能的值
  4. 允许使用通配符
  5. 对于前3个要求,我可以使用一个简单的[ValidateSet('this', 'that', 'another')]参数来执行此操作:

    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
    

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

0 个答案:

没有答案