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

soa*_*dos 10 powershell powershell-ise powershell-2.0

我觉得我做的事情很傻,但问题在于:

Function getPropertyOfFile($a, $b, $c)
{
    $a.GetDetailsOf($b, $c)
}
Run Code Online (Sandbox Code Playgroud)

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

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

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

到底他妈发生了什么?

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

编辑:我试图将这个问题的答案包装成函数.

编辑2:

Function getPropertyOfFile $a $b $c
{
    $a.GetDetailsOf($b, $c)
}
Run Code Online (Sandbox Code Playgroud)

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

Joe*_*oey 16

PowerShell中的函数与cmdlet类似,因此您无需使用逗号分隔参数.

您的调用可能如下所示:

getPropertyOfFile($foo, $bar, $baz)
Run Code Online (Sandbox Code Playgroud)

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

你需要像这样调用它:

getPropertyOfFile $foo $bar $baz
Run Code Online (Sandbox Code Playgroud)

如上所述,它与您调用cmdlet的方式相同.你甚至可以这样做

getPropertyOfFile -a $foo -c $baz -b $bar
Run Code Online (Sandbox Code Playgroud)

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

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