Powershell参数传递给函数看似不起作用

时间:2012-02-23 20:44:26

标签: powershell powershell-v2.0 powershell-ise

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

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

如果我传递了适合该函数的$ a,$ b,$ c变量,则说明

  

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

但是,如果我直接用我传递的参数替换$ a,$ b,$ c,然后尝试运行它,它运行正常。

到底发生了什么事?

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

修改:我正在尝试将this question的答案打包成函数。

编辑2:

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

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

2 个答案:

答案 0 :(得分:14)

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

您的调用可能如下所示:

getPropertyOfFile($foo, $bar, $baz)

导致$a的值为$foo, $bar, $baz(数组)而$b$c$null

你需要这样称呼它:

getPropertyOfFile $foo $bar $baz
如上所述,

与您调用cmdlet的方式相同。你甚至可以做

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

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

编辑:如前所述您的功能声明罚款 。问题在于代码您没有发布,但对于具有PowerShell体验的人来说很容易推理。即,您的函数的调用

答案 1 :(得分:3)

当使用空格而不是逗号(即

)调用函数时,需要将参数分开
getPropertyOfFile $arg1 $arg2 $arg3

而不是

getPropertyOfFile $arg1, $arg2, $arg3

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

相关问题