2017-10-06 62 views
0

我正在嘗試編寫一個PowerShell腳本來遍歷整個目錄結構,並提供文件中包含的任何潛在敏感信息的文件名,路徑和行號。當我運行下面的代碼時,它看起來像目錄中的所有單個對象都合併成一個名爲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.= 

回答

0

Select-String是報告它正常工作的對象。您將文件的內容通過Get-Content傳送到該cmdlet。這不是一個文件路徑,所以它不知道數據來自哪裏。所以它告訴你InputStream是源代碼。這通過Microsoft證實:

Select-String的默認輸出是一個MatchInfo對象,其中包含有關匹配的詳細信息。當您搜索文件中的文本時,該對象中的信息很有用,因爲MatchInfo對象具有文件名和線等屬性。 當輸入不是來自文件時,這些參數的值是InputStream

重點煤礦

爲了什麼你正在尋找你需要稍微改變你的邏輯。

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

Select-String確實通過這樣使用,你可以得到你期待的結果管道接受文件路徑。我也dropped Format-Table as that can cause you heart ache later和全名是不是警告,默認情況下Select-String支持正則表達式的Select-String

返回的財產,你必須在該字符串正則表達式控制字符。如果您不打算使用正則表達式,請使用-SimpleMatch

+0

解決了它,我誤解了選擇字符串的用法。謝謝 – Craig

+0

[你知道的越多](https://www.youtube.com/watch?v=Zmvt7yFTtt8) – Matt