Powershell功能不起作用

时间:2009-09-22 15:50:16

标签: powershell

我在旧的powershell文件夹中找到了这个函数:

Function listAllPaths([string]$fromFolder,[string]$filter) {
  Get-ChildItem -Path $fromFolder -Recurse $filter | Select-Object -Property FullName
}

想要测试一下。我把它放在我的个人资料中,启动Powershell并键入以下内容:

PS C:\> listAllPaths("C:\Downloads\Nemi","*.jpg")

该文件夹是自定义的,它恰好与Vista下载文件夹同名。有问题的子文件夹没有但是 jpg文件,但屏幕上没有任何内容。有人能告诉我我做错了吗?(因为这可能是我做错了什么,我很确定)。

1 个答案:

答案 0 :(得分:8)

经典问题 - 调用PowerShell函数就像调用PowerShell cmdlet一样 - 使用空格分隔符而不是parens,例如:

PS> listAllPaths C:\Downloads\Nemi *.jpg

请注意,在这样调用时,您不需要围绕args进行双重qoutes。在PowerShell 2.0中,请务必使用Set-StrictMode -version 2.0,它将捕获此错误:

PS> Set-StrictMode -Version 2.0
PS> function foo($a,$b) {"$a $b"}
PS> foo(1,2)
The function or command was called as if it were a method. 
Parameters should be separated by spaces. For information about 
parameters, see the about_Parameters Help topic.
At line:1 char:4
+ foo <<<< (1,2)
    + CategoryInfo          : InvalidOperation: (:) [], RuntimeException
    + FullyQualifiedErrorId : StrictModeFunctionCallWithParens

这是调用此PowerShell函数的正确方法:

PS> foo 1 2
1 2

仅供参考,您调用listAllPaths的方式会将数组(“C:\ Downloads \ Nemi”,“* .jpg”)传递给$ fromFolder参数。 $ filter参数没有收到任何值。

我还应该提一下,在调用.NET / COM / WMI方法时,你只想使用逗号和parens。