我正在编写一个具有多个可能参数的自定义PowerShell函数.
function foo {
param(
[Parameter(Mandatory=$true)]
[string]$param1_A,
[Parameter(Mandatory=$true)]
[int]$param1_B,
[Parameter(Mandatory=$true)]
[string]$param2_A,
[Parameter(Mandatory=$true)]
[int]$param2_B
)
}
Run Code Online (Sandbox Code Playgroud)
我基本上有两组互斥参数.我可以指定$param1_A或者$param1_B,但不能同时指定两者.我也可以指定$param2_A或者$param2_B,但不能同时指定.
总而言之,这是一个可能的调用表:
在所有情况下,至少有一个参数是强制性的.
如何声明我的参数以强制执行此要求?
我试图使用不同的参数集,但我没有成功,因为我没有找到一种方法来描述至少一个参数的概念.
如果它可以帮助,我有实用功能,可以转换$param1_A到$param1_B和$param2_A到$param2_B.
好的,我设法使用参数集.我之前没有理解的是,我可以[Parameter]在同一个参数上声明多个属性.因此,正如建议的mjolinor,我实际上可以使用参数集.
这是我的功能的更新代码:
function foo {
param(
[Parameter(Mandatory=$true, ParameterSetName='A')]
[Parameter(Mandatory=$true, ParameterSetName='C')]
[string]$param1_A,
[Parameter(Mandatory=$true, ParameterSetName='B')]
[Parameter(Mandatory=$true, ParameterSetName='D')]
[int]$param1_B,
[Parameter(Mandatory=$true, ParameterSetName='A')]
[Parameter(Mandatory=$true, ParameterSetName='B')]
[string]$param2_A,
[Parameter(Mandatory=$true, ParameterSetName='C')]
[Parameter(Mandatory=$true, ParameterSetName='D')]
[int]$param2_B
)
$PSCmdlet.ParameterSetName
}
Foo -param1_A 1 -param2_A "1"
Foo -param1_B 1 -param2_A "1"
Foo -param1_A 1 -param2_B "1"
Foo -param1_B 1 -param2_B "1"
Run Code Online (Sandbox Code Playgroud)
将输出:
A
B
C
D
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2902 次 |
| 最近记录: |