Условный Обязательный в 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.
Все это работает независимо от ваших строгих настроек режима.