参数validateset通配符

时间:2017-11-28 11:19:29

标签: powershell

是否可以使Paramater validateset使用通配符?

我希望在*个地方接受0-100。

param
  (
    [Parameter(Mandatory=$True)]
    [validateset("6.1.*.*")]
    [string]$variable
  )

错误讯息:

  

无法验证参数'variable'的参数。参数“6.1.1.0”不属于ValidateSet属性指定的“6.1。”集。提供集合中的参数,然后再次尝试该命令。           + CategoryInfo:InvalidData:(:) [],ParentContainsErrorRecordException           + FullyQualifiedErrorId:ParameterArgumentValidationError

2 个答案:

答案 0 :(得分:2)

不,那是[ValidatePattern()]的用途:

param(
    [Parameter(Mandatory=$True)]
    [ValidatePattern('6\.1\.\d{1,3}\.\d{1,3}')]
    [string]$variable
)

它需要一个正则表达式作为参数。

如果存在一组小的常量值,则使用

[ValidateSet()]。 PowerShell还为这些提供自动完成功能。例如:

[ValidateSet('Windows', 'Mac', 'Linux')
$OperatingSystem

有关更多参数验证属性,请参阅this article

答案 1 :(得分:2)

由于您希望验证版本,您可能需要声明[version]类型的参数并使用ValidateScript属性来验证值而不是字符串匹配:

function Test-Version {
  param(
    [ValidateScript({
        $_.Major -eq '6' -and 
        $_.Minor -eq '1' -and
        $_.Build -in (0..100) -and
        $_.Revision -in (0..100) -or 
        $(throw 'Wrong Version')
      })]
    [version]$Version
  )    
}