两个参数$ installDatabase和$ databasePassword:
[Parameter(ParameterSetName='Test', mandatory=$false)][Switch]$installDatabase,
[Parameter(ParameterSetName='Test')][String]$databasePassword
如果符合以下条件,我需要执行与此相同的功能:
if ($installDatabase -and !($databasePassword) -or ($databasePassword -and !($installDatabase)))
{
Write-Verbose "Use -installDatabase and -databasePassword together."
}
ParameterSet有什么问题?
答案 0 :(得分:1)
function Do-Something{
Param(
[Parameter(ParameterSetName='Test', Mandatory=$true)]
[Switch]$installDatabase,
[Parameter(ParameterSetName='Test', Mandatory=$true)]
[String]$databasePassword
)
}
]
之前缺少 [String]
答案 1 :(得分:1)
(在PS v5上测试)
似乎参数集仅在定义了至少两个时才起作用 - 但是,不是引发异常而是提示用户提供缺失值(因为Mandatory=$True
),这可能不是您想要的
如果Param
定义更改为:
Param(
[Parameter(ParameterSetName='Test1', Mandatory=$True)]
[Switch]$installDatabase,
[Parameter(ParameterSetName='Test1', Mandatory=$True)]
[String]$databasePassword,
[Parameter(ParameterSetName='Test2')]
[String]$something
)
如果只提供了其中一个,系统会提示用户installDatabase
或databasePassword
,如果提供something
则不会提示用户。
如果提供了something
和(installDatabase
或databasePassword
),则会引发异常。
如果只定义了一个参数集,那就好像没有。
修改强>
尝试对可选参数使用默认值($throw...)
,例如:
[Parameter(ParameterSetName='Test1')]
[Switch]$installDatabase=$(throw "installDatabase is mandatory if databasePassword is provided"),
不起作用,因为无论参数集是否适用,都会使用默认值。
答案 2 :(得分:1)
编辑:确定这是一个评估参数集的版本
function test
{
[CmdletBinding(DefaultParameterSetName="Test")]
param(
[Parameter(ParameterSetName='Test', mandatory=$true)]
[switch]$installDatabase,
[Parameter(ParameterSetName='Test2', mandatory=$true)]
[String]$databasePassword
)
}
在此版本中,您可以拨打test -installDatabase
或test -databasePassword pwd
或发生以下异常:
test : Parameter set cannot be resolved using the specified named parameters.