PowerShell-用于在文件内容中搜索关键字的脚本

时间:2018-11-01 19:41:18

标签: powershell for-loop

我有以下脚本,该脚本将在文件夹位置搜索包含单词' 5047373 '的所有文件。但是,它似乎只能检查文本文件。它需要能够搜索多种类型的文件,包括word,csv,xlsx,pdf,txt等。

   Get-ChildItem “C:\Documents” -recurse | Select-String -pattern “5047373” | group path | select name

2 个答案:

答案 0 :(得分:1)

由于Select-String默认情况下使用正则表达式,因此您可以构建一个正则表达式OR列表。像这样的东西

$ThingsToLookFor = @(
    'One'
    '22'
    'Three'
    '4444'
    'Five'
    )

$TTLF_Regex = $ThingsToLookFor -join '|'

'A demo line of text with 4444 embedded in it.' -match $TTLF_Regex

output = True

希望有帮助,

答案 1 :(得分:1)

您最好的选择是使用Windows桌面搜索。 PowerShell默认情况下不具备搜索这些文件类型的功能,但是您可以轻松地在Windows 10上安装软件包以使用在资源管理器中获得的搜索功能:

Install-Package PsSearch -Scope CurrentUser

一旦安装了该文件,则应该能够从文本文件中的单词列表中进行搜索,如下所示。将您的文字输入文本文件words.txt中,例如:

5047373
123456
Apple
Pie

那么你可以做:

$SearchResults = foreach ($Word in (Get-Content "words.txt")) {
    Search-Index $Word
}

然后$SearchResults是与查询列表匹配的文件列表。由此,您可以获得一个唯一的文件名列表:

$FileNames = ($SearchResults | Select-Object -Unique FullName).FullName