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



我确定这个问题已经被问过并回答了,或者答案正盯着我的脸,但我不确定我是否正确地问了它以找到我正在寻找的答案。

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

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

文件夹结构如下所示:

对于生产:

E:Users<username>DIRproduction.ini  

对于测试:

E:Users<username>DIRTesttest.ini  

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

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

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

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

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

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

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

为了抑制错误,我包括了缩写。-EA 0-ErrorAction SilentlyContinue

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

最新更新