目录中的 Powershell 对象正在合并到 InputStream 中

Powershell objects in a directory are being merged into InputStream

我正在尝试编写一个 powershell 脚本来遍历整个目录结构并提供文件名、路径和文件中包含的任何潜在敏感信息的行号。当我 运行 下面的代码时,目录中的所有单个对象似乎都合并到一个名为 inputstream 的对象中。为什么会这样?

代码:

Get-ChildItem -Recurse | Get-Content -ErrorAction SilentlyContinue | Select-String -Pattern "key.=" | Format-Table FullName, Path, LineNumber, Pattern;

输出:

FullName Path        LineNumber Pattern
-------- ----        ---------- -------
         InputStream       1653 key.=  
         InputStream       2550 key.=  
         InputStream       3405 key.=  
         InputStream       4302 key.=  
         InputStream       4584 key.= 

Select-String 正在报告它正在正确处理的对象。您通过 Get-Content 将文件 contents 通过管道传输到 cmdlet。它不是文件路径,因此它不知道数据来自何处。所以它告诉你 InputStream 是源。微软证实了这一点:

The default output of Select-String is a MatchInfo object, which includes detailed information about the matches. The information in the object is useful when you are searching for text in files, because MatchInfo objects have properties such as Filename and Line. When the input is not from the file, the value of these parameters is InputStream.

强调我的

对于您正在寻找的内容,您需要稍微更改您的逻辑。

Get-ChildItem -Recurse | Select-String -Pattern "key.=" | Select Path, LineNumber, Pattern

Select-String 确实通过管道接受文件路径,因此使用它您可以获得预期的结果。我也 并且 FullName 不是 Select-String

返回的 属性

警告 默认情况下 Select-String 支持正则表达式,并且该字符串中有一个正则表达式控制字符。如果您不打算使用正则表达式,请使用 -SimpleMatch