Условный Обязательный в PowerShell

Я пытаюсь сделать параметр обязательным, но только если другой параметр использует определенные значения ValidateSet. Кажется, что использование блока кода в Mandatory не работает должным образом.

function Test-Me {
    [CmdletBinding()]
    Param (
        [Parameter()]
        [ValidateSet("NameRequired", "AlsoRequired")]
        [string]
        $Type = "NoNameRequired",

        [Parameter(Mandatory = {-not ($Type -eq "NoNameRequired")})]
        [string]
        $Name
    )

    Process {
        Write-Host "I ran the process block."
        Write-Host "Type = '$Type'"
        Write-Host "Name = '$Name'"
        Write-Host "Name Parameter Mandatory? = '$(-not ($Type -eq "NoNameRequired"))'"
    }
}

1 ответ

Решение
Set-StrictMode -Version Latest

function Test-Me {
    [CmdletBinding(DefaultParameterSetName = "Gorgonzola")]
    Param (

        [Parameter(Mandatory)]
        [int]
        $Number,

        [Parameter(Mandatory, ParameterSetName = "NameNeeded")]
        [ValidateSet("NameRequired", "AlsoRequired")]
        [string]
        $Type = "NoNameRequired",

        [Parameter(Mandatory, ParameterSetName = "NameNeeded")]
        [string]
        $Name
    )

    Process {
        Write-Host "I ran the process block."
        Write-Host "Number = '$Number'"
        Write-Host "Type = '$Type'"
        Write-Host "Name = '$Name'"
        Write-Host "Name Parameter Mandatory = '$(-not ($Type -eq "NoNameRequired"))'"
    }
}

Наборы параметров, по-видимому, помогают моделировать условные обязательные параметры.

Я могу сделать это там, где, если задан параметр Type или Name, то они оба обязательны. Это может происходить независимо от других параметров в функции, таких как приведенный выше параметр Number of sibling Number.

Я установил имя набора параметров по умолчанию на что-то случайное; Я обычно указываю "Нет". Это имя набора параметров не обязательно должно существовать, опять же, указывается параметром Number.

Все это работает независимо от ваших строгих настроек режима.

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