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

D3v*_*r0n 5 powershell scripting powershell-ise powershell-2.0 powershell-3.0

我很好奇如何根据这个例子生成一个不同的文件列表.

**此示例生成包含文本"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(*'}
Run Code Online (Sandbox Code Playgroud)

这很酷,效果很好,但我得到重复的文件输出(相同的文件,但不同的行号).

如何保持文件输出清晰?

目前的不良输出:

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

所需的输出:

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

帮我调整我的脚本?

Sha*_*evy 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
Run Code Online (Sandbox Code Playgroud)

  • 如果它有助于解决截断问题,您可以控制控制台窗口大小.$ host.UI.RawUI.BufferSize = new-object System.Management.Automation.Host.Size(512,512); (3认同)