powershell 无法解析参数集

n9vozmp4  于 2023-04-30  发布在  Shell
关注(0)|答案(2)|浏览(146)
function f {
  param(
    [Parameter(ParameterSetName='A', Position=0)]
    [int] $Num,
    [Parameter(ParameterSetName='A', Position=1)]
    [Parameter(ParameterSetName='B', Position=0)]
    [scriptblock] $Script
  )
}

f 123 {}
f {}

为什么第二次调用的参数集无法解析?似乎完全可以解决。至少,似乎有足够的信息。

zf9nrax1

zf9nrax11#

您需要添加DefaultParameterSetName以避免歧义。在第二个函数调用时,PowerShell无法判断您是想使用参数集A还是B

function f {
    [CmdletBinding(DefaultParameterSetName = 'B')]
    param(
        [Parameter(ParameterSetName = 'A', Position = 0)]
        [int] $Num,

        [Parameter(ParameterSetName = 'A', Position = 1)]
        [Parameter(ParameterSetName = 'B', Position = 0)]
        [scriptblock] $Script
    )

    $PSCmdlet.ParameterSetName
}

f 123    # A
f 123 {} # A
f {}     # B
oo7oh9g9

oo7oh9g92#

使用Mandatory来明确某些参数对于某些参数集是强制性的。

function f {
    param(
        [Parameter(Mandatory = $true, ParameterSetName = 'A', Position = 0)]
        [int] $Num,
        [Parameter(ParameterSetName = 'A', Position = 1)]
        [Parameter(ParameterSetName = 'B', Position = 0)]
        [scriptblock] $Script
    )
}

f 123 {}
f {}

相关问题