Ваш код работает, файл заполняется. Однако то, что вы указали, не имеет заголовков, определенных как на снимке экрана. Кроме того, как выглядит этот list.txt. Мой searchlist.txt - это файл с одним столбцом:
Hello
client
Использование вашего кода как есть, только изменение пути к файлу и имени и небольшое изменение места доступа к имени файла дает эти результаты ...
$searchWords = gc 'D:\Scripts\searchlist.txt'
$results = @()
Foreach ($sw in $searchWords)
{
$files = gci -path d:\temp -filter "*$sw*" -recurse
foreach ($file in $files)
{
$object = New-Object System.Object
$object | Add-Member -Type NoteProperty –Name SearchWord –Value $sw
$object | Add-Member -Type NoteProperty –Name FoundFile –Value $file.FullName
$results += $object
}
}
$results | Export-Csv d:\temp\searchresults.csv -NoTypeInformation
# Results
# psEdit -filenames 'd:\temp\searchresults.csv'
SearchWord FoundFile
---------- ---------
Hello D:\temp\Duplicates\PowerShellOutput.txt
Hello D:\temp\Duplicates\BeforeRename1\PowerShellOutput.txt
Hello D:\temp\Duplicates\PoSH\PowerShellOutput.txt
Hello D:\temp\Duplicates\Text\PowerShellOutput.txt
client D:\temp\Client.txt
client D:\temp\Duplicates\CertLabClients_v1.ps1
client D:\temp\Duplicates\Check Logon Server for Client.ps1
client D:\temp\Duplicates\Create Wireless Hosted Networks in Windows Clients.ps1
...
Обновление для OP
Так как вы используете отдельный список запятых. Вы должны разбить это на отдельные предметы. Я изменил свой файл на этот
Hello,client
Вы не можете сопоставить этот макет, если не пытаетесь сопоставить всю последовательную строку. Итак, если я нарушу вышеизложенное таким образом ...
$searchWords = (gc 'D:\Scripts\searchlist.txt') -split ','
… таким образом, результаты будут такими, как показано ранее.
Обновление для OP
Пример, тест с этим (другой грубый подход) ...
Foreach ($sw in $searchWords)
{
Get-Childitem -Path "d:\temp" -Recurse -include "*.txt","*.csv" |
Select-String -Pattern "$sw" |
Select Path,LineNumber,@{n='SearchWord';e={$sw}}
}
Линейный номер был добавлен в сон, поэтому покажите, где находится строка. Также обратите внимание, что ваш код и то, что я предоставляю здесь, будет работать только для текстовых, CSV-файлов.
Если вы планируете нажимать на них, doc, docx, xls, xlsx, это означает, что вам потребуется больше кода, поскольку вам нужно использовать стандартные приложения Word, Excel, чтобы открывать и читать эти файлы.
Это означает использование модели объектов COM для каждого из этих типов файлов в вашем коде. Как обсуждено и показано здесь:
Как заставить PowerShell искать в документе Word подстановочные знаки и возвращать найденное слово?
Вам нужно сделать аналогичную вещь для Excel или PowerPoint, и если у вас есть PDF, для этого требуется и дополнение.
Обновление для OP
Как я уже сказал, я собрал это все вместе быстро, так что это немного грубо (без обработки ошибок и т. Д.), Когда я проверил его, используя мой входной файл и целевое дерево папок, и оно работает.
# This is what my input looks like
Hello,client
595959, 464646
LIC
Выполнение кода должно было дать вам следующие результаты, используя только файлы .txt, .csv. Использование любого другого типа файла приведет к ошибке в соответствии с моим комментарием, приведенным выше, относительно этого подхода нельзя использовать для нетекстовых файлов без использования собственного приложения для нетекстового типа файла.
$searchWords = ((gc 'D:\Scripts\searchlist.txt') -split ',').Trim()
Foreach ($sw in $searchWords)
{
Get-Childitem -Path "d:\temp" -Recurse -include "*.txt","*.csv" |
Select-String -Pattern "$sw" |
Select Path,LineNumber,@{n='SearchWord';e={$sw}}
}
Path LineNumber SearchWord
---- ---------- ----------
D:\temp\Duplicates\BeforeRename1\PsGet.txt 157 Hello
...
D:\temp\Duplicates\PoSH\PsGet.txt 157 Hello
...
D:\temp\Duplicates\BeforeRename1\PoSH-Get-Mo... 108 client
D:\temp\Duplicates\BeforeRename1\Powershell ... 12 client
D:\temp\Duplicates\BeforeRename1\Powershell ... 15 client
D:\temp\Duplicates\BeforeRename1\PsGet.txt 454 client
...
D:\temp\newfile.txt 4 client
D:\temp\MyFile.txt 5 595959
D:\temp\ProcessNames.csv 4 595959
D:\temp\Duplicates\Text\JSON-CSS.txt 30 464646
D:\temp\Duplicates\JSON-CSS.txt 30 464646
D:\temp\MyFile.txt 5 464646
D:\temp\ProcessNames.csv 4 464646
D:\temp\Duplicates\BeforeRename1\GetSetScree... 7 LIC