使用PowerShell-Pattern在多个文件上搜索多个值

iaqfqrcu  于 2022-11-10  发布在  Shell
关注(0)|答案(1)|浏览(122)

团队--我有一段代码可以按照设计工作。它将扫描文件夹层次结构中的所有文件以查找特定单词,然后返回找到该单词所有示例的文件的已消除重复数据的文件路径。

$properties = @(
    'Path'
)

Get-ChildItem -Path \\Server_Name\Folder_Name\* -recurse |  
Select-String -Pattern ‘Hello’ | 
Select-Object $properties -Unique |
Export-Csv \\Server_Name\Folder_Name\File_Name.csv -NoTypeInformation

我想
1.扩展此代码以能够一次搜索多个单词。所以所有找到‘Hello’或‘Hola’的案例...如果可能的话,还可能包括整个单词列表。
1.让代码不仅返回文件路径,还返回触发它的单词……如果两个单词都跳过了,则同一路径有多行
我找到了一些文章,讨论使用如下方法进行多个单词搜索:

where { $_ | Select-String -Pattern 'Hello' } |
  where { $_ | Select-String -Pattern 'Hola' } |

Select-String -Pattern ‘(Hello.Hola)|(Hola.Hello)’

这些代码将运行..。但RETURN输出文件中不返回任何数据...它只是空白的标题‘路径’。
我错过了一些明显的东西..。有没有人愿意用一双新的眼睛?
女士

hk8txs48

hk8txs481#

Get-ChildItem -Path \\Server_Name\Folder_Name\* -recurse |  
  Select-String -Pattern 'Hello', 'Hola' | 
    Select-Object Path, Pattern |
      Export-Csv \\Server_Name\Folder_Name\File_Name.csv -NoTypeInformation

注:

  • 如果一个给定的匹配行匹配多个模式,则只按输入顺序报告它的第一个匹配模式。
  • 虽然添加-AllMatches通常会在一行上找到所有匹配项,但对于传递给-Pattern多个模式,对于.Matches属性中报告的匹配项,从PowerShell 7.2.x开始,这不会像预期的那样工作-请参见GitHub issue #7765
  • 类似地,.Pattern属性不会反映匹配的(潜在)多个模式;事实上,这在目前甚至是不可能的,因为.Pattern属性是[Microsoft.PowerShell.Commands.MatchInfo][string]类型的成员,因此不能反映多个模式。

相关问题