【问题标题】:powershell: add pscustomobject to ArrayList, but all items goto 1st propertypowershell:将 pscustomobject 添加到 ArrayList,但所有项目都转到第一个属性
【发布时间】:2015-05-13 05:12:39
【问题描述】:

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

$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”。

【问题讨论】:

    标签: powershell pscustomobject


    【解决方案1】:

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

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

    对于那些不阅读 cmets 的人,@TheMadTechnician 为您提供了在 PS 中使用参数调用函数的两种正确方法: f "kkk" "aaa" 或 f -a1 "kkk" -a2 "aaa"

    【讨论】:

    • 向他展示传递他的论点的正确方法可能会很好:f "kkk" "aaa"f -a1 "kkk" -a2 "aaa"
    • @TheMadTechnician,你的评论应该是一个答案。
    • 感谢您的及时答复,10 分钟内完成!哇!
    【解决方案2】:

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

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

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

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

    f "kkk" "aaa"
    

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

    f -a1 "kkk" -a2 "aaa"
    

    执行其中任何一个都会产生您想要的输出。

    【讨论】:

    • 谢谢,这个更详细了!
    • @ImmanuelKant 如果它对你有帮助,你应该支持这个答案,而不是写感谢评论,这就是这里的方式
    • 他没有足够的声誉来投票,但他应该accept 他认为对他的问题@ImmanuelKant 的最佳答案。
    猜你喜欢
    • 2021-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-04
    • 1970-01-01
    • 2023-01-15
    • 1970-01-01
    • 2012-09-08
    相关资源
    最近更新 更多