目录/文本搜索上的DISTINCT Select-String输出

时间:2012-10-31 15:58:33

标签: powershell scripting powershell-v2.0 powershell-v3.0 powershell-ise

我很好奇如何基于此示例生成不同的文件列表。

**此示例生成包含文本“folders”但在同一行上没有文本“.invoke”的所有.ps1和.psm1文件的列表。

$text='folders'
dir C:\Workspace\mydirectorytosearch1\ -recurse -filter '*.ps*1' | Get-ChildItem | select-string -pattern $text | where {$_ -NotLike '*.invoke(*'}
dir C:\Workspace\mydirectorytosearch2\ -recurse -filter '*.ps*1' | Get-ChildItem | select-string -pattern $text | where {$_ -NotLike '*.invoke(*'}

这很酷并且运行良好但我得到重复的文件输出(相同的文件但不同的行号)。

如何保持文件输出的清晰?

目前的不良输出:

  
      
  • C:\工作区\ mydirectorytosearch1 \匿名化-psake.ps1:4 :. “$($ folders.example.test)\匿名化\ Example.vars.ps1”      C:\工作区\ mydirectorytosearch1 \匿名化-psake.ps1:5 :. “$($ folders.missles)\提取\集结utilities.ps1”
  •   

所需的输出:

  
      
  • C:\工作区\ mydirectorytosearch1 \匿名化-psake.ps1
  •   

帮我调整一下我的脚本??

1 个答案:

答案 0 :(得分:7)

您可以使用Select-String和Unique参数消除重复:

$text='folders'
Get-ChildItem C:\Workspace\mydirectorytosearch1\,C:\Workspace\mydirectorytosearch2\ -Recurse -Filter '*.ps*1' |
Select-String -Pattern $text | Where-Object {$_ -NotLike '*.invoke(*'} | 
Select-Object Path -Unique