gpt4 book ai didi

powershell - 如何定义需要两个参数之一的函数?

转载 作者:行者123 更新时间:2023-12-02 15:49:30 25 4
gpt4 key购买 nike

对于以下函数,它必须具有 int 类型的 Group 参数或 int 数组类型的 Items 参数。如何定义函数?它必须具有这些参数之一,但不能同时具有两者。

Start-Execute -Group 1
Start-Execute -Items 100,200,300

最佳答案

您想使用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 只是多个 $Group 的数组(即,单个 item$Group 相同) >group),那么你的函数应该接受一个 int 数组 [int[]],然后总是用 foreach 处理它,因为这样可以正常工作即使提供了单个值。

将一个参数添加到多个参数集中。

您询问添加一个名为 -Debug 的参数。我只想指出 -DebugCommon 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

当您想要对不同的集合使用不同的设置时,这非常有用,例如使该参数在一个参数集中是必需的,但在另一个参数集中是可选的,或者使该参数可用于多个但不是所有集合。

关于powershell - 如何定义需要两个参数之一的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30062356/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com