5

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

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

$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:\Workspace\mydirectorytosearch1\anonymize-psake.ps1:4:。"$($folders.example.test)\anonymize\Example.vars.ps1"
  • C:\Workspace\mydirectorytosearch1\anonymize-psake.ps1:5:。"$($folders.missles)\extract\build-utilities.ps1"

所需的输出:

  • C:\Workspace\mydirectorytosearch1\anonymize-psake.ps1

帮我调整我的脚本??

4

1 回答 1

8

您可以使用 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
于 2012-10-31T17:33:39.913 回答