LightningWar
LightningWar

Reputation: 975

Parameter sets - ensure parameters exist

I'm trying to use Parameter Sets to replicate this functionality:

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

Simple example of what I have so far:

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

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

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

This is not working. I can supply $hostName without $databasePassword for example, or $dataBasename without $databasePassword and the function runs.

What am I missing?

Upvotes: 0

Views: 39

Answers (2)

Ansgar Wiechers
Ansgar Wiechers

Reputation: 200273

Make two parameter sets, make $Hostname mandatory in the first, make $DatabaseName optional in the first and mandatory in the other, make $DatabasePassword mandatory in both.

[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
)

Upvotes: 1

4c74356b41
4c74356b41

Reputation: 72171

Set databasePassword to be mandatory?

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

Upvotes: 1

Related Questions