您想使用Parameter Sets,这是Advanced Functions 的一个功能。
function Start-Execute {
[CmdletBinding()]
param(
[Parameter(
ParameterSetName='ByGroup',
Mandatory=$true
)]
[int]
$Group ,
[Parameter(
ParameterSetName='ByItems',
Mandatory=$true
)]
[int[]]
$Items
)
# function code
}
在函数内部,您可以通过测试$PSCmdlet.ParameterSetName的值来确定指定了哪个参数集,以查看它与哪个参数集匹配。
要查看您的参数集是否正确创建,请在执行函数定义后运行以下命令:
Get-Help Start-Execute
这将显示每个参数集的单独调用。
话虽如此,我们无法判断您的功能是做什么的。如果$Items 只是一个包含多个$Groups 的数组(即单个item 与group 相同),那么您的函数应该接受单个int 数组[int[]] 然后只需始终使用foreach 处理它,因为即使提供了单个值,它也能正常工作。
将一个参数添加到多个参数集。
您询问了添加一个名为-Debug 的参数。我只想指出-Debug 是Common Parameter,因此您可能不应该使用该名称。我将展示一个使用名为 -Test 的参数的示例:
function Start-Execute {
[CmdletBinding()]
param(
[Parameter(
ParameterSetName='ByGroup',
Mandatory=$true
)]
[int]
$Group ,
[Parameter(
ParameterSetName='ByItems',
Mandatory=$true
)]
[int[]]
$Items ,
[Switch]
$Test
)
)
# function code
}
这是一种方法:不要提供任何参数集名称。它将在所有套装中提供。
另一种方法是为每个参数集提供单独的[Parameter()] 属性:
[Parameter(
ParameterSetName='ByItems',
Mandatory=$true
)]
[Parameter(
ParameterSetName='ByGroup',
Mandatory=$false
)]
[Switch]
$Test
当您想为不同的集合使用不同的设置时,这很有用,例如使该参数在一个参数集中是必需的,而在另一个参数集中是可选的,或者使该参数可用于多个但不是所有的集合。