Наборы параметров - убедитесь, что параметры существуют
Я пытаюсь использовать наборы параметров для репликации этой функциональности:
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