powershell:将pscustomobject添加到ArrayList,但所有项目都转到1st属性

时间:2015-05-13 05:12:39

标签: powershell pscustomobject

我刚刚创建了一个简单的函数" f"将一个pscustomobject元素添加到一个arraylist中,但在显示它时,结果不是我所期望的:

$c=New-Object System.Collections.ArrayList($null)
function f([string]$a1,[string]$a2)
{
    $c.Add([PSCustomObject]@{item1=$a1;item2=$a2})
}

f("kkk","aaa")
$c

结果是:

item1                                item2
-----                                -----
kkk aaa

在我看来," kkk"和" aaa"如果我输入

,则转到item1
$c.item1

打印

kkk aaa

为什么呢?我希望item1成为" kkk"和item2是" aaa"。

2 个答案:

答案 0 :(得分:2)

看看这里的powershell陷阱: https://stackoverflow.com/tags/powershell/info

  

PowerShell用空格分隔函数参数,而不是用逗号分隔。

对于那些没有阅读评论的人来说@TheMadTechnician为您提供了两种正确的方法来调用PS中的参数: f "kkk" "aaa"或f -a1 "kkk" -a2 "aaa"

答案 1 :(得分:1)

好的,正如所建议的,回答。 Kayasax确实给出了正确的答案,即使他没有帮助你解决问题。将这两个字符串分配给第一个属性的原因是因为您错误地调用了函数。您已经有效地将1个参数传递给函数,即包含两个字符串的数组。要正确地将多个参数传递给函数,请按名称指定它们(由您在函数中指定参数的变量或任何声明的别名派生),或者您可以传递它们,而无需按照它们在声明它们的顺序命名它们。功能,由空格隔开。

在您的代码中,您实际上是这样做的:

f -a1 ("kkk","aaa") -a2

要纠正问题,您可以按位置传递参数:

f "kkk" "aaa"

或者您可以按名称传递参数(按名称传递时顺序无关紧要):

f -a1 "kkk" -a2 "aaa"

执行其中任何一项操作都会产生所需的输出。