我在旧的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文件,但屏幕上没有任何内容。有人能告诉我我做错了吗?(因为这可能是我做错了什么,我很确定)。
答案 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。