我想知道是否有可能(如果是这样)在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"
依此类推,能够在一次通话中多次使用可重复参数。
可以这样做吗?如果是这样的话?
感谢您的时间。
编辑:为清楚起见,我不是指一个数组参数,而是一个可重复的参数,其中链接的参数集可以与可重复参数的每个实例匹配。
答案 0 :(得分:2)
由于PowerShell支持 arrays 作为参数值,因此通常无需重复参数。
没有语法方法来强制执行配对(链接)参数值的方式与重复实例相同的参数名称,因为参数名称必须是唯一的(即使他们没有必须是独一无二的,单凭它也不会强制执行所需的配对)。
但是,您可以使用并行数组参数,并在函数中强制执行它们的对称,例如:
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"