Наборы параметров - убедитесь, что параметры существуют

Я пытаюсь использовать наборы параметров для репликации этой функциональности:

if (($hostName) -or ($databaseName) -and (!$databasePassword)) {
    throw "If hostName or databaseName specified, you must use databasePassword parameter."
}

Простой пример того, что у меня так далеко:

[Parameter(Mandatory=$false, ParameterSetName="Test")]
[string]$hostName,

[Parameter(Mandatory=$false, ParameterSetName="Test")]
[string]$databaseName,

[Parameter(Mandatory=$false, ParameterSetName="Test")]
[string]$databasePassword

Это не работает. Я могу поставить $hostName без $databasePassword например, или $dataBasename без $databasePassword и функция запускается.

Что мне не хватает?

2 ответа

Решение

Сделайте два набора параметров, сделайте $Hostname обязательно во первых, сделай $DatabaseName необязательно в первом и обязательно в другом, сделайте $DatabasePassword обязательно в обоих.

[CmdletBinding(DefaultParameterSetName='host')]
Param(
    [Parameter(ParameterSetName='host', Mandatory=$true)]
    [string]$Hostname,

    [Parameter(ParameterSetName='host', Mandatory=$false)]
    [Parameter(ParameterSetName='dbname', Mandatory=$true)]
    [string]$DatabaseName,

    [Parameter(ParameterSetName='host', Mandatory=$true)]
    [Parameter(ParameterSetName='dbname', Mandatory=$true)]
    [string]$DatabasePassword
)

Задавать databasePassword быть обязательным?

[Parameter(Mandatory=$true, ParameterSetName="Test")]
[string]$databasePassword
Другие вопросы по тегам