参数集 - 确保参数存在

Parameter sets - ensure parameters exist

我正在尝试使用参数集来复制此功能:

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

这是行不通的。例如,我可以在没有 $databasePassword 的情况下提供 $hostName,或者在没有 $databasePassword 的情况下提供 $dataBasename 并且函数运行。

我错过了什么?

设置databasePassword为必填项?

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

制作两个参数集,第一个$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
)