gpt4 book ai didi

function - Powershell 函数中的可重复参数(最好是链接参数集)

转载 作者:行者123 更新时间:2023-12-02 19:17:30 24 4
gpt4 key购买 nike

我想知道是否有可能(如果可以的话如何)在 PowerShell 函数中创建可重复(并且希望是链接的)参数。这就是我寻找它的工作方式:

function foo()
{
[CmdletBinding()]
Params(
[Parameter(Mandatory=$true,ParameterSetName="Default")]
[Parameter(Mandatory=$true,ParameterSetName="Set1")]
[Parameter(Mandatory=$true,ParameterSetName="Set2")]
[string]$SomeParam1,
[Parameter(Mandatory=$true,ParameterSetName="Set1")]
[Parameter(Mandatory=$true,ParameterSetName="Set2")]
*some magic here, likely, to make this repeatable*
[string]$SomeRepeatableParam,
[Parameter(Mandatory=$true,ParameterSetName="Set1")]
[string]$SomeLinkedParam1,
[Parameter(Mandatory=$true,ParameterSetName="Set2")]
[string]$SomeLinkedParam2
)
Begin
{
*some code here*
}
Process
{
foreach ($val in $SomeRepeateableParam)
{
*some code here using param and its linked param*
}
}
End
{
*some code here*
}
}

然后像这样调用这个函数:

foo -SomeParam "MyParam" -SomeRepeatableParam "MyProperty1" -SomeLinkedParam1 "Tall" -SomeRepeatableParam "MyProperty2" -SomeLinkedParam2 "Wide"

等等,能够在一次调用中多次使用可重复参数,只要我愿意。

这可以做到吗?如果是的话怎么办?

感谢您的宝贵时间。

编辑:为了清楚起见,我的意思不是数组参数,而是可重复参数,其中链接的参数集可以与可重复参数的每个实例相匹配。

最佳答案

由于 PowerShell 支持数组作为参数值,因此通常不需要重复参数。

没有语法方法可以按照您想要的方式强制参数值配对(链接),并且具有相同参数名称的重复实例,因为参数名称必须唯一(甚至它们也不必是唯一的,单凭这一点并不能强制执行所需的配对)。

但是,您可以使用并行数组参数,并在函数内强制其对称性,例如:

function foo
{
[CmdletBinding()]
Param(
[string] $SomeParam1,
[string[]] $SomeRepeatableParam,
[string[]] $SomeLinkedParam
)
if ($SomeRepeatableParam.Count -ne $SomeLinkedParam.Count) {
Throw "Please specify paired values for -SomeRepeatableParam and -SomeLinkedParam"
}
for ($i = 0; $i -lt $SomeRepeatableParam.Count; ++$i) {
$SomeRepeatableParam[$i] + ': ' + $SomeLinkedParam[$i]
}
}

然后您可以按如下方式调用它(请注意 , 来分隔数组元素):

foo -SomeParam1 "MyParam" `
-SomeRepeatableParam "MyProperty1", "MyProperty2" `
-SomeLinkedParam "Tall", "Wide"

关于function - Powershell 函数中的可重复参数(最好是链接参数集),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36584735/

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