如何在powershell脚本中获取命名参数的数量?

时间:2012-03-22 10:07:54

标签: powershell

即。 ABC.ps1有这个

param(
[bool]$A= $False,
[bool]$B= $False,
[bool]$C= $False
)

$count=$Args.Count
Write-Host "$count"

如果我称之为: 。\ ABC.ps1 $ True $ True $ True 它应该显示3。

这只是一个猜测,但是$ Args.Count总是为零,可能是因为Args没有保存/计算命名参数。

3 个答案:

答案 0 :(得分:7)

命名参数的数量可以从$ psboundparameters

获得
&{param(
[bool]$A= $False,
[bool]$B= $False,
[bool]$C= $False
)
$psboundparameters | ft auto
$psboundparameters.count
} $true $true $true

Key Value
--- -----
A    True
B    True
C    True


3

$ arg确实只包含未绑定的参数。

答案 1 :(得分:2)

$ args将保存超过命名参数count(未绑定参数)的值的计数。如果你有三个命名参数并发送五个参数,$ args.count将输出2。

请记住,如果存在CmdletBinding属性,则不允许剩余参数,并且您将收到错误:

function test
{
    [cmdletbinding()]
    param($a,$b,$c)
    $a,$b,$c    
}

test a b c d

test: A positional parameter cannot be found that accepts argument 'd'.

要允许剩余参数,您将使用ValueFromRemainingArguments参数属性。现在所有未绑定的参数都将累积在$ c:

function test
{
    [cmdletbinding()]
    param($a,$b,[Parameter(ValueFromRemainingArguments=$true)]$c)
    "`$a=$a"
    "`$b=$b"
    "`$c=$c"    
}

test a b c d

$a=a
$b=b
$c=c d

答案 2 :(得分:1)

命名Param在$psboundparameters.count中绑定任何其他附加参数在$args.count中绑定传递的总参数为($psboundparameters.count + $args.count).

测试它:

param(
[bool]$A,
[bool]$B,
[bool]$C
)

$count=$Args.Count
Write-Host "$a - $b - $c - $($args[0]) - $count"

$psboundparameters.count

$args.count

称之为.\abc.ps1 $true $true $true $false