Powershell:Cmdlet绑定属性的顺序

时间:2016-02-18 13:35:20

标签: powershell

一个简单的功能:

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 ......')会被完全忽略? 为什么呢?

1 个答案:

答案 0 :(得分:0)

我相信它只会使用它看到的最后一个Validate属性,这就是为什么更改它们定义的顺序会改变行为。实际上,如果您正在使用它,那么您无法将这两项检查放在ValidateScript代码中。