Наборы взаимоисключающих параметров в PowerShell: почему это неоднозначно?

Я пытался заставить работать несколько наборов взаимных исключений. Я хочу, чтобы «Ширина» взаимоисключала «WidthReset», а «Высота» была взаимоисключающей с «HeightReset».

Справка по командлету показывает:

          Get-ArgTest [-Width <int>] [-Height <int>]  [<CommonParameters>]
    Get-ArgTest [-Width <int>] [-HeightReset]  [<CommonParameters>]
    Get-ArgTest [-Height <int>] [-WidthReset]  [<CommonParameters>]
    Get-ArgTest [-WidthReset] [-HeightReset]  [<CommonParameters>]

См. следующий код.

Все работает, но Get-ArgTest -WidthResetкажется двусмысленным.

Почему этот случай неоднозначен? Другие симметричные случаи не помечаются как двусмысленные.

Как я могу разрешить двусмысленность?

Изменение DefaultParameterSetName на B или C меняет, какой случай неоднозначен.

Это указывает мне, что это должно работать.

      ##########################################
# This cmdlet *should* accept
# [-Width | -WidthReset] [-Height | -HeightReset]
##########################################
function Get-ArgTest
{
  [CmdletBinding(DefaultParameterSetName = 'A')]
    param(
            [Parameter(ParameterSetName='A')]
            [Parameter(ParameterSetName='B')]
            [int] $Width,

            [Parameter(ParameterSetName='C')]
            [Parameter(ParameterSetName='A')]
            [int] $Height,

            [Parameter(ParameterSetName='C')]
            [Parameter(ParameterSetName='D')]
            [switch] $WidthReset,

            [Parameter(ParameterSetName='B')]
            [Parameter(ParameterSetName='D')]
            [switch] $HeightReset
    )

    Write-Output "HELLO, Width=$Width, Height=$Height, WidthReset=$WidthReset, HeightReset=$HeightReset"
}

##########################################
# Tests
##########################################
# First, display HELP
Get-ArgTest -?

####
## Try each combination
# First, just the values
Get-ArgTest 
Get-ArgTest -Width 2
Get-ArgTest          -Height 4
Get-ArgTest -Width 2 -Height 4

# Values and the opposite reset
Get-ArgTest -Width 2                         -HeightReset
Get-ArgTest          -Height 4   -WidthReset

# The Resets
Get-ArgTest                      -WidthReset -HeightReset
Get-ArgTest                      -WidthReset -HeightReset:$False
Get-ArgTest                      -WidthReset:$False -HeightReset:$True

# I cannot get the following cases to work :-(
Get-ArgTest                      -WidthReset
Get-ArgTest                                  -HeightReset

0 ответов

Другие вопросы по тегам