参数验证
在 PowerShell 中,有多种方法可以验证参数输入。
如果传递无效值,这些 ParameterAttributes 将抛出,而不是在函数或脚本中编写代码来验证参数值。
ValidateSet
有时我们需要限制参数可以接受的可能值。假设我们只想在脚本或函数中为 $Color
参数仅允许红色,绿色和蓝色。
我们可以使用 ValidateSet
参数属性来限制它。它具有在设置此参数时允许选项卡完成的额外好处(在某些环境中)。
param(
[ValidateSet('red','green','blue',IgnoreCase)]
[string]$Color
)
你还可以指定 IgnoreCase
以禁用区分大小写。
ValidateRange
这种参数验证方法采用最小和最大 Int32 值,并要求参数在该范围内。
param(
[ValidateRange(0,120)]
[Int]$Age
)
ValidatePattern
此参数验证方法接受与指定的正则表达式模式匹配的参数。
param(
[ValidatePattern("\w{4-6}\d{2}")]
[string]$UserName
)
ValidateLength
这种参数验证方法测试传递的字符串的长度。
param(
[ValidateLength(0,15)]
[String]$PhoneNumber
)
ValidateCount
这种参数验证方法测试传入的参数数量,例如,字符串数组。
param(
[ValidateCount(1,5)]
[String[]]$ComputerName
)
ValidateScript
最后,ValidateScript 方法非常灵活,使用一个 scriptblock 并使用$ _来表示它,以表示传递的参数。然后,如果结果为$ true(包括任何输出为有效),则传递参数。
这可用于测试文件是否存在:
param(
[ValidateScript({Test-Path $_})]
[IO.FileInfo]$Path
)
要检查 AD 中是否存在用户:
param(
[ValidateScript({Get-ADUser $_})]
[String]$UserName
)
几乎任何你能写的东西(因为它不仅限于 oneliners):
param(
[ValidateScript({
$AnHourAgo = (Get-Date).AddHours(-1)
if ($_ -lt $AnHourAgo.AddMinutes(5) -and $_ -gt $AnHourAgo.AddMinutes(-5)) {
$true
} else {
throw "That's not within five minutes. Try again."
}
})]
[String]$TimeAboutAnHourAgo
)