针对特定子路径的Get-ChildItem递归搜索

时间:2017-07-10 13:18:49

标签: powershell

我确定这个问题已被提问和回答,或者答案正在盯着我的脸,但我不确定我是否正确地要求找到答案我是&#39 ;我正在寻找。

我希望使用PowerShell搜索用户目录,从ini文件中提取特定行(从旧管理员保存不良记录中清除)。

我想做什么来减少搜索时间(很多目录要运行)以及我想根据生产和测试ini文件拆分我的结果集我正在寻找

这是文件夹结构的样子:

生产:

E:\Users\<username>\DIR\production.ini  

对于测试:

E:\Users\<username>\DIR\Test\test.ini  

所以我想运行这样的东西(在E :)的根部:

Get-ChildItem -Recurse -Path ".\DIR\*.ini" | Select-String "DeviceName="
Get-ChildItem -Recurse -Path ".\DIR\Test\*.ini" | Select-String "DeviceName="

这样,它会查看每个用户的文件夹中的确切路径,而不是通过所有子文件夹进行递归。我需要使用通配符ini,因为有2到3个可能的文件,具体取决于它们运行的​​应用程序的版本。

一如既往地感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

如果您知道项目名称和路径,我建议您在Get-Item代替使用GCI

答案 1 :(得分:0)

正确的格式化使问题清晰,取消隐藏<UserName>等。

根据您的PoSh版本,使用-Directory|where $_.PSIsContainer首先迭代userFolders,然后直接检查两个可能的文件夹。

Get-ChildItem -Path E:\Users -Directory | ForEach-Object {
  Get-ChildItem -Path "$($_.FullName)\Dir"      -Filter *.ini -EA 0 |Select-String "DeviceName="
  Get-ChildItem -Path "$($_.FullName)\Dir\Test" -Filter *.ini -EA 0 |Select-String "DeviceName="
}

为了抑制错误我包含了缩写。 -EA 0

-ErrorAction SilentlyContinue