在上一篇讲完Advanced Function中的HelpURI之后,我们今天接着要说的是另一个新特性:“PositionalBinding”。
从字面上理解PostionalBinding就是位置参数绑定的意思,PositionalBinding参数是用来决定方法中参数的位置,它可以设置为$true或者$false。接下来让我们看看他在Function中的具体作用。
Function Test-Positional
{
[CmdletBinding()]
Param
(
[Parameter()]
$StringData1,
[Parameter()]
$StringData2
)
Write-Host -Object $StringData1
Write-Host -Object $StringData2
}
Test-Positional "A" "B"
如上例子,我们按照以往定义一个Function一样,对这个函数进行以往的操作,即便没有键入参数名也没有得到任何错误。
再来,让我们看看配合使用PositionalBinding的设置后的情况,将PositionalBinding设置为$False就意味着你将不需要位置参数的绑定。
Function Test-Positional
{
[CmdletBinding(PositionalBinding=$False)]
Param
(
[Parameter()]
$StringData1,
[Parameter()]
$StringData2
)
Write-Host -Object $StringData1
Write-Host -Object $StringData2
}
Test-Positional "A" "B"
由于设置了不绑定位置参数的关系,而我们又没有设定Position,所以当你在没有键入参数名的情况下,方法就提示找不到参数名所匹配的位置了,也就是说如果设置为$False后,我们必须强制指定参数名才行。
Test-Positional : A positional parameter cannot be found that accepts argument
'A'.
At line:16 char:1
+ Test-Positional "A" "B"
+ ~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidArgument: (:) [Test-Positional], Paramete
rBindingException
+ FullyQualifiedErrorId : PositionalParameterNotFound,Test-Positional
所以,当设定不绑定参数位置的时候,我们只能指定其每个参数的位置才能避免方法能顺利匹配所对应的参数值。
Function Test-Positional
{
[CmdletBinding(PositionalBinding=$False)]
Param
(
[Parameter(Position=0)]
$StringData1,
[Parameter(Position=1)]
$StringData2
)
Write-Host -Object $StringData1
Write-Host -Object $StringData2
}
Test-Positional "A" "B"
如果在没有指定参数位置的情况下,当然也可以强制手动输入参数名的方式来执行。
Function Test-Positional
{
[CmdletBinding(PositionalBinding=$False)]
Param
(
[Parameter()]
$StringData1,
[Parameter()]
$StringData2
)
Write-Host -Object $StringData1
Write-Host -Object $StringData2
}
Test-Positional -StringData1 "A" -StringData2 "B"