我希望在参数集中实现以下功能:
function [A | B] [C | D] (E) (F)
在英语中尽可能简洁,我希望A,B,C和D为Manadatory=$true
,但A和B不能在同一个命令中,也不能在C和D中.E和F永远是可选的。
我想我可以使用以下逻辑扩展多个ParameterSetName
属性:
function A C (E) (F)
function A D (E) (F)
function B C (E) (F)
function B D (E) (F)
但是下面的句子说每个参数集必须有一个unqiue参数,但正如你所看到的,我每次使用A和B两次。 PowerShell运行时将它们标识为唯一参数集的唯一方法是查看两个paremters,而不仅仅是一个。
每个参数集必须具有Windows的唯一参数 PowerShell运行时可用于公开相应的参数集
有没有办法实现这个目标?
答案 0 :(得分:1)
测试后用代码编辑
所以我创建了一些模拟代码来展示我的意思:
function Test-abcdef
{
param
(
[Parameter(Mandatory = $true,ParameterSetName = 'a-c')]
[Parameter(Mandatory = $true,ParameterSetName = 'a-d')]
$a,
[Parameter(Mandatory = $true,ParameterSetName = 'b-c')]
[Parameter(Mandatory = $true,ParameterSetName = 'b-d')]
$b,
[Parameter(Mandatory = $true,ParameterSetName = 'a-c')]
[Parameter(Mandatory = $true,ParameterSetName = 'b-c')]
$c,
[Parameter(Mandatory = $true,ParameterSetName = 'a-d')]
[Parameter(Mandatory = $true,ParameterSetName = 'b-d')]
$d,
[Parameter]
$e,
[Parameter]
$f
)
switch ($PsCmdlet.ParameterSetName)
{
'a-c' {
Write-Output $a $c
break
}
'a-d' {
Write-Output $a $d
break
}
'b-c' {
Write-Output $b $c
break
}
'b-d' {
Write-Output $b $d
break
}
}
}
help Test-abcdef
如果您对上述功能提供帮助,则会提供以下信息:
NAME
Test-abcdef
SYNTAX
Test-abcdef -a <Object> -d <Object> [-e <Parameter>] [-f <Parameter>] [<CommonParameters>]
Test-abcdef -a <Object> -c <Object> [-e <Parameter>] [-f <Parameter>] [<CommonParameters>]
Test-abcdef -b <Object> -d <Object> [-e <Parameter>] [-f <Parameter>] [<CommonParameters>]
Test-abcdef -b <Object> -c <Object> [-e <Parameter>] [-f <Parameter>] [<CommonParameters>]
我认为这正是你想要的。
如果此帖子适合您,请将其标记为已解答
原始邮件:
我认为您需要创建4个参数集,AC,AD,BC和BD,您需要定义每个参数集中的所有参数,例如,您需要定义A两次,一次在集合AC中,一次在集AD中。
不要将E或F放在任何一组中。