如果设置了参数集中的参数之一,则需要所有参数



我想使参数集中的所有参数都是必需的,但前提是实际指定了其中一个参数(全部或没有情况(。 所以我希望能够将我的函数调用为Test-Mandatory -Param1Test-Mandatory -Param1 -Param2 -Param3.因此,当我指定 Param2 时,我希望 Param3 是强制性的,反之亦然。

我本以为以下一些东西可以实现这一点:

Function Test-Mandatory
{
Param
(
[switch]$Param1,
[Parameter(ParameterSetName='Set1', Mandatory)]
[switch]
$Param2,
[Parameter(ParameterSetName='Set1', Mandatory)]
[switch]
$Param3
)
}

但是,当我使用上述内容时,我不能调用该函数作为Test-Mandatory -Param1,因为它会提示我为 param2/param3 提供一个值。 我知道我可以添加另一个参数,将其添加到集合中,并使其成为非强制性的,这将使我能够使用开关在参数集之间切换,但我宁愿不这样做。 有没有另一种方法可以解决这个问题,我忽略了?

创建两个参数集:一个仅包含 Param1,另一个包含所有三个参数。由于您只能在 Param(( 中指定一次每个参数,因此您可以通过向 Param1 添加两个 set 属性来实现。

Function Test-Mandatory
{
[CmdletBinding(DefaultParametersetName='Set1')]
Param
(
[Parameter(ParameterSetName='Set1', Mandatory=$true)]
[Parameter(ParameterSetName='Set2', Mandatory=$true)]
[switch]$Param1,
[Parameter(ParameterSetName='Set2', Mandatory=$true)]
[switch]$Param2,
[Parameter(ParameterSetName='Set2', Mandatory=$true)]
[switch]$Param3
)
}
Test-Mandatory -Param1  # works
Test-Mandatory -Param1 -Param2  # asks for param3

最新更新