Arrays Powershell将数组传递到函数错误为空

Arrays Powershell将数组传递到函数错误为空,arrays,function,powershell,Arrays,Function,Powershell,我使用以下代码创建了一个自定义对象数组: $LOTR = @() $myObject = new-object PSObject $myObject | Add-Member -type NoteProperty -name GroupName - Value $city.name $myObject | Add-Member -type NoteProperty -name GroupType - Value $city.type $LOTR += $myObject $LOTR (afte

我使用以下代码创建了一个自定义对象数组:

$LOTR = @()
$myObject = new-object PSObject
$myObject | Add-Member -type NoteProperty -name GroupName - Value $city.name
$myObject | Add-Member -type NoteProperty -name GroupType - Value $city.type
$LOTR += $myObject

$LOTR (after iterations):

GroupName      GroupType
----------     ----------
Aragon          Gondor
Arwen           Rivendell
我想将
$LOTR
传递到我编写的一个函数中,如果存在多个Gondor
GroupType
,该函数将进行比较。下面是检查数组是否成功通过的函数

function Comparison {
    param ({[Parameter(Mandatory-=$True)[string[]]$myarray})
    write-host $myarray
}
我的问题是,当我试图传递
$LOTR
时,我得到一个错误
无法将参数绑定到参数“myarray”,因为它是一个空数组

我做错了什么?我尝试过使用强制函数来接受空数组,但它是空的。但是在powershell命令行上打印
$LOTR
会返回我输入的所有值。我不确定我会错在哪里

如果我对您的语法做一些更改,您的代码(某种程度上)可以正常工作

$myObject | Add-Member -type NoteProperty -name GroupName - Value $city.name
应为以下内容,并在
Value

$myObject | Add-Member -type NoteProperty -name GroupName -Value $city.name
我更新了函数,使其看起来像这样。删除强制后面的连字符和大括号。格式只是为了可读性

function Comparison{
    param (
        [Parameter(Mandatory=$True)]
        [string[]]$myarray)
    write-host $myarray
}
至于你为什么要投一个字符串数组,我不知道

我用您的测试数据得到以下输出

@{GroupName=Aragon; GroupType=Gondor} @{GroupName=Arwen; GroupType=Rivendell}

这里的空格
-Value
是打字错误吗?您的函数也有问题。谢谢您的修复,错误消失了。但是,当我从函数内部打印$myarray时,它仍然是空的。我应该使用字符串数组以外的其他对象吗?@HeyJude这完全取决于您对数据的处理方式。由于$LOTR是自定义对象数组,请从比较函数中删除
[string[]]
,因为它不是字符串数组。如果您确实需要类型声明(您不需要),请使用
[System.Array]
[System.Object[]]