PowerShell函数参数:第一个可以先选择吗?

Joe*_*oey 4 parameters powershell

我在PowerShell中有一个高级函数,大致如下所示:

function Foo {
    [CmdletBinding]
    param (
        [int] $a = 42,
        [int] $b
    )
}
Run Code Online (Sandbox Code Playgroud)

这个想法是它可以用两个,一个或没有参数运行.但是,成为可选的一个参数是一个.因此,以下方案可以运行该功能:

Foo a b    # the normal case, both a and b are defined
Foo b      # a is omitted
Foo        # both a and b are omitted
Run Code Online (Sandbox Code Playgroud)

但是,通常PowerShell会尝试将单个参数放入a中.所以我考虑明确指定参数位置,其中a将位置0和b位置1.但是,为了仅允许b指定我尝试将a放入参数集.但是根据当前使用的参数集,b将需要不同的位置.

任何想法如何妥善解决?我想保留参数名称(实际上不是ab),因此使用$args可能是最后的手段.我可能可以定义两个参数集,一个带有两个必需参数,另一个带有一个可选参数,但我猜参数名称在这种情况下必须不同,那么,对吧?

Kei*_*ill 5

关于如何正确解决这个问题的想法?不,我已经争论过一个类似的功能,如果位置0的参数是管道绑定,任何其他参数的"位置"向下滑动,这样你就可以继续提供位置参数,而不必诉诸于所有命名参数.该团队认为这对于人们来说太混乱了 - 有参数转移位置.此行为是将管道绑定参数放在位置参数末尾的一个很好的理由.:-)

BTW具有高级功能,$ args不是一个选项.有点像$ _ - 它不适用.ValueFromRemainingArguments改为使用,例如:

    [Parameter(ValueFromRemainingArguments=$true)]
    $rest
Run Code Online (Sandbox Code Playgroud)