0

我刚刚创建了一个简单的函数“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”。

4

2 回答 2

2

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

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

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

于 2015-05-13T05:21:06.657 回答
1

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

在您的代码中,您实际上是在执行以下操作:

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

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

f "kkk" "aaa"

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

f -a1 "kkk" -a2 "aaa"

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

于 2015-05-13T05:47:27.260 回答