2014-12-02 46 views
0

我用下面的代码创建的自定义对象的数组: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 (after iterations): 

GroupName  GroupType 
----------  ---------- 
Aragon   Gondor 
Arwen   Rivendell 

我想通过$LOTR为我写了一个函数,如果超过一个刚铎GroupType存在会比较。下面是检查数组是否成功传递的一个函数。

function Comparison { 
    param ({[Parameter(Mandatory-=$True)[string[]]$myarray}) 
    write-host $myarray 
} 

我的问题是,当我试图通过$LOTR我得到一个错误Cannot bind argument to parameter 'myarray' because it is an empty array

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

+0

是空格'下面的输出 - Value'这里一个错字?你的函数语法也有问题 – Matt 2014-12-02 17:07:40

回答

0

你的代码工作(排序)如果我做一些改变你的语法

$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} 
+0

感谢您的修复,错误消失了。但是,当我从函数内部打印$ myarray时,它仍然是空的。我应该使用字符串数组以外的其他东西吗? – HeyJude 2014-12-02 17:45:34

+0

@HeyJude,这一切都取决于你在处理数据。 – Matt 2014-12-02 18:11:34

+0

由于$ LOTR是一个自定义对象的数组,因此从比较函数中移除'[string []]',因为它不是一个字符串数组。如果你确实需要一个类型声明(你不需要)使用'[System.Array]'或'[System.Object []]' – xXhRQ8sD2L7Z 2014-12-02 21:48:45