参数集 - 确保参数存在

时间:2018-01-10 10:27:39

标签: powershell parameter-sets

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

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 个答案:

答案 0 :(得分:1)

databasePassword设为必填项?

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

答案 1 :(得分: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
)