对于以下函数,它必须具有Groupint类型的参数或Itemsint数组类型的参数.如何定义功能?它必须具有这些参数之一,但不能同时具有这两个参数.
Start-Execute -Group 1
Start-Execute -Items 100,200,300
Run Code Online (Sandbox Code Playgroud)
function Start-Execute {
[CmdletBinding()]
param(
[Parameter(
ParameterSetName='ByGroup',
Mandatory=$true
)]
[int]
$Group ,
[Parameter(
ParameterSetName='ByItems',
Mandatory=$true
)]
[int[]]
$Items
)
# function code
}
Run Code Online (Sandbox Code Playgroud)
在函数内部,您可以通过测试值来确定指定了$PSCmdlet.ParameterSetName哪个参数集,以查看它匹配的参数集.
要查看您的参数集是否已正确创建,请在执行函数定义后运行以下命令:
Get-Help Start-Execute
Run Code Online (Sandbox Code Playgroud)
这将显示每个参数集的单独调用.
话虽如此,我们无法分辨你的功能.如果$Items只是一个多个$Groups 的数组(也就是说,单个item与a相同group),那么你的函数应该接受一个int数组[int[]]然后总是用它来处理它foreach,因为即使只有一个,它也能正常工作提供的价值.
你问过添加一个名为的参数-Debug.我只想指出这-Debug是一个公共参数,所以你可能不应该使用该名称.我将使用名为的参数显示一个示例-Test:
function Start-Execute {
[CmdletBinding()]
param(
[Parameter(
ParameterSetName='ByGroup',
Mandatory=$true
)]
[int]
$Group ,
[Parameter(
ParameterSetName='ByItems',
Mandatory=$true
)]
[int[]]
$Items ,
[Switch]
$Test
)
)
# function code
}
Run Code Online (Sandbox Code Playgroud)
这是一种方法:不提供任何参数集名称.它将在所有套装中提供.
另一种方法是[Parameter()]为每个参数集提供单独的属性:
[Parameter(
ParameterSetName='ByItems',
Mandatory=$true
)]
[Parameter(
ParameterSetName='ByGroup',
Mandatory=$false
)]
[Switch]
$Test
Run Code Online (Sandbox Code Playgroud)
当您想对不同的集使用不同的设置时,这非常有用,例如,在一个参数集中强制使用此参数,在另一个参数集中强制使用此参数,或者使参数可用于多个但不是所有集.
| 归档时间: |
|
| 查看次数: |
115 次 |
| 最近记录: |