Как получить количество именованных параметров в скрипте powershell? - PullRequest
3 голосов
/ 22 марта 2012

Viz. 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 всегда равен нулю, возможно потому, что он не содержит / не считает именованные аргументы.

Ответы [ 3 ]

7 голосов
/ 22 марта 2012

Количество именованных параметров можно получить из $ 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 действительно содержит только несвязанные параметры.

2 голосов
/ 22 марта 2012

$ args будет содержать количество значений, которое превышает количество именованных параметров (несвязанные параметры). Если у вас есть три именованных параметра и вы отправили пять аргументов, $ 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
1 голос
/ 22 марта 2012

Именованный параметр связывается в $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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...