将路径传递给函数使得Get-ChildItem返回更多文件

时间:2014-12-17 14:47:44

标签: powershell

我有一个简单的命令,列出了脚本文件夹中的所有文件

$files = Get-ChildItem -Path $PSScriptRoot
foreach ($file in $files)
{
    Write-Host $file
}

它给了我以下输出:

PS C:\Users\ivu> D:\jenkins\workspace\DeploymentInstaller\usemod.ps1
functions.psm1
installClient.ps1
installClientParams.ps1
usemod.ps1

问题: 现在,当我用函数包装代码并且过滤器Get-ChildItem突然返回更多文件时,我无法解释的行为发生了。
有人可以解释这种行为吗?

Function funct($path, $regex){
    Write-Host $path
    Write-Host $regex

    $files = Get-ChildItem -Path $path -Filter $regex
    foreach ($file in $files)
    {
        Write-Host $file
    }
}
funct($PSScriptRoot, "*")

输出

PS C:\Users\ivu> D:\jenkins\workspace\DeploymentInstaller\usemod.ps1
functions.psm1
installClient.ps1
installClientParams.ps1
usemod.ps1
C:\Users\ivu\.dbvis
C:\Users\ivu\.eclipse
C:\Users\ivu\.squirrel-sql
C:\Users\ivu\.swt
C:\Users\ivu\Citrix
C:\Users\ivu\Contacts
C:\Users\ivu\Desktop
C:\Users\ivu\Documents
C:\Users\ivu\Downloads
C:\Users\ivu\faab
C:\Users\ivu\Favorites
C:\Users\ivu\Links
C:\Users\ivu\Music
C:\Users\ivu\Pictures
C:\Users\ivu\Saved Games
C:\Users\ivu\Searches
C:\Users\ivu\Tracing
C:\Users\ivu\transfer
C:\Users\ivu\Videos
C:\Users\ivu\workspace
C:\Users\ivu\.jboss-cli-history
C:\Users\ivu\bla.txt
C:\Users\ivu\Icc.state

1 个答案:

答案 0 :(得分:2)

您正在正确调用该功能。通过在参数中使用逗号实际上最终传递一个数组,所以你基本上说:

Get-ChildItem D:\jenkins\workspace\DeploymentInstaller
Get-ChildItem C:\Users\ivu

如果您打电话如下,您将获得预期结果:

funct $PSScriptRoot "*"

我说"预期结果" 就像在那里列出文件

D:\jenkins\workspace\DeploymentInstaller

因为您调用的脚本位于该目录中,因此$PSScriptRoot将包含该值。