Powershell:Cmdlet绑定属性的顺序
一个简单的函数:Powershell:Cmdlet绑定属性的顺序,powershell,Powershell,一个简单的函数: function Just-Test { [CmdletBinding()] Param( [Parameter(Mandatory=$true)] [ValidateSet('yes','no')] [string]$inputen, [Parameter(Mandatory=$true)] [ValidateScript( { if(!(
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
)
}
然后我调用函数:
只需测试-输入“是”-组件“172.168.0.1”
第一:没有计算机“172.168.0.1”,第二:模式错误,因此我得到错误:
仅测试:无法验证参数“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
)
}
当然,我会遇到一个错误:
仅测试:无法验证参数“comp”上的参数。没有连接到服务器!
但是公司名称('172…')的错误模式将被完全忽略??
为什么?我相信它只会使用它看到的最后一个Validate属性,这就是为什么更改它们在中定义的顺序会更改行为。如果您仍在使用ValidateScript代码,那么确实没有理由不能在代码中同时添加这两个检查。您可能希望查看未来问题的预览,因为这很难阅读。为什么要应用附加验证程序,而有些人已经说,该参数没有价值?