是否可以使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
答案 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
)
}