一个简单的功能:
function Just-Test
{
[CmdletBinding()]
Param(
[Parameter(Mandatory=$true)]
[ValidateSet('yes','no')]
[string]$inputen,
[Parameter(Mandatory=$true)]
[ValidateScript(
{
if(!(Test-Connection -ComputerName $_ -count 1 -quiet))
{
throw "no conn to server!"
}
else
{
$true
}
})]
[ValidatePattern('^19')]
[string]$comp
)
}
然后我调用函数: Just-Test -inputen' yes' -comp' 172.168.0.1'
首先:没有计算机' 172.168.0.1',第二:模式错误,所以我收到错误: Just-Test:无法验证参数' comp'的参数。论证" 172.168.0.1"不符合" ^ 19"图案。提供一个匹配" ^ 19"然后再次尝试命令。
然后我更改代码并直接放置[ValidationPattern] ......强制..:
function Just-Test
{
[CmdletBinding()]
Param(
[Parameter(Mandatory=$true)]
[ValidateSet('yes','no')]
[string]$inputen,
[Parameter(Mandatory=$true)]
[ValidatePattern('^19')]
[ValidateScript(
{
if(!(Test-Connection -ComputerName $_ -count 1 -quiet))
{
throw "no conn to server!"
}
else
{
$true
}
})]
[string]$comp
)
}
当然我收到一个错误: Just-Test:无法验证参数' comp'的参数。没有conn到服务器! 但是comp-name的错误模式(' 172 ......')会被完全忽略? 为什么呢?
答案 0 :(得分:0)
我相信它只会使用它看到的最后一个Validate属性,这就是为什么更改它们定义的顺序会改变行为。实际上,如果您正在使用它,那么您无法将这两项检查放在ValidateScript代码中。