我试图将我的头放在参数集上。似乎很直截了当,直到需要使用A
或B
或同时使用A & B
为止。我基本上必须能够说,在两个参数中,至少必须提供一个。
这是我当前正在使用的代码示例(不带参数集),但这只能传递$c
。
Function Test-Params
{
Param
(
[string[]]
$a,
[string[]]
$b,
[Parameter(Mandatory=$true)]
[string]
$c
)
}
是否可以使用参数集来处理此问题,或者在函数内执行某种形式的验证是否更合适?
我希望以下内容被接受:
Test-Params -a $arr_a -c "C:\test.txt"
Test-Params -b $arr_b -c "C:\test.txt"
Test-Params -a $arr_a -b $arr_b -c "C:\test.txt"
答案 0 :(得分:2)
为要接受的每个选项定义多个参数集(blog on this):
Function Test-Params {
Param (
[Parameter(ParameterSetName='AC', Mandatory=$True)]
[Parameter(ParameterSetName='ABC', Mandatory=$True)]
[string[]]$a,
[Parameter(ParameterSetName='BC', Mandatory=$True)]
[Parameter(ParameterSetName='ABC', Mandatory=$True)]
[string[]]$b,
[Parameter(ParameterSetName='AC', Mandatory=$True)]
[Parameter(ParameterSetName='BC', Mandatory=$True)]
[Parameter(ParameterSetName='ABC', Mandatory=$True)]
[string]$c
)
$a
$b
$c
}
这些将被接受
Test-Params -a ParamA -c ParamC
Test-Params -b ParamB -c ParamC
Test-Params -a ParamA -b ParamB -c ParamC
但是,如果您只尝试A
和B
,它将使用ParameterSetName='ABC'
并提示输入C
,因为这在该集合中也是必需的。
C:\> Test-Params -a ParamA -b ParamB
cmdlet Test-Params at command pipeline position 1
Supply values for the following parameters:
c: