0

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

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

我错过了什么?

4

2 回答 2

1

设置databasePassword为强制?

[Parameter(Mandatory=$true, ParameterSetName="Test")]
[string]$databasePassword
于 2018-01-10T10:33:26.190 回答
1

设置两个参数集,$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
)
于 2018-01-10T10:44:33.053 回答