$ 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