2012-03-22 11 views
3

Viz。 私のようにそれを呼び出す場合ABC.ps1このpowershellスクリプトで名前付きパラメータの数を取得する方法は?

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

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

を持っています。 \ ABC.ps1 $ $ Trueに真$真 それは3

これは単なる推測ですが、$ argsは表示されるはずですArgsは名前付き引数を保持していないので、.Countは常にゼロです。名前付きパラメータの

答えて

6

数は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は確かにだけ結合していないパラメータが含まれています$から得ことができます。

+0

$ psboundparameters.countは私が探していたものです。ありがとう。 – dushyantp

2

$ argsは、指定されたパラメータ数(アンバインドされたパラメータ)を超える値の数を保持します。

:あなたは3つのという名前のパラメータを持っていて、5つの引数は、$ 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で蓄積されます:Paramの名前

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 
1

は、他の追加の引数が渡された総引数が$args.countにバインドされている$psboundparameters.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

+0

$ psboundparameters.countは私が探していたものです。ありがとう。 – dushyantp

関連する問題