我尝试使用参数集来复制此功能:
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
并运行该功能。
我错过了什么?
答案 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
)