12

我觉得我在做一些愚蠢的事情,但问题是:

Function getPropertyOfFile($a, $b, $c)
{
    $a.GetDetailsOf($b, $c)
}

如果我传递适合该函数的 $a, $b, $c 变量,它会失败说

“方法调用失败,因为 [System.Object[]] 不包含名为 'GetDetailsOf' 的方法。”

但是,如果我直接将 $a, $b, $c 替换为我传递的参数,然后尝试运行它,它就可以正常工作。

到底他妈发生了什么?

注意:我正在使用 powershell ISE,并通过将功能复制/粘贴到控制台来将功能输入到 powershell。我也一直在假设如果我输入一个具有相同名称的新函数,它将被覆盖。有没有更好的方法从 .ps1 中读取 PS?

编辑:我试图将这个问题的答案包装到函数中。

编辑2:

Function getPropertyOfFile $a $b $c
{
    $a.GetDetailsOf($b, $c)
}

给出Missing function body in function declaration. At line:1 char:28错误。

4

2 回答 2

20

PowerShell 中的函数调用类似于 cmdlet,因此您不需要用逗号分隔参数。

您的调用可能如下所示:

getPropertyOfFile($foo, $bar, $baz)

这导致$a具有值$foo, $bar, $baz(数组) while$b$care $null

你需要这样称呼它:

getPropertyOfFile $foo $bar $baz

如前所述,这与调用 cmdlet 的方式相同。你甚至可以做

getPropertyOfFile -a $foo -c $baz -b $bar

此时您可能会注意到您的函数参数的命名不是很好;-)

编辑:如前所述,您对函数的声明很好。问题出在您没有发布的代码中,但对于具有 PowerShell 经验的人来说很容易推断出来。即,调用您的函数。

于 2012-02-23T20:51:16.700 回答
3

使用空格而不是逗号调用函数时,您需要分隔参数,即

getPropertyOfFile $arg1 $arg2 $arg3

代替

getPropertyOfFile $arg1, $arg2, $arg3

第二种形式将传递一个包含$arg1, $arg2$arg3作为参数的单个数组 $a

于 2012-02-23T20:51:54.160 回答