найти все файлы и строки, содержащие определенную строку

261
Nora Seinfield

Я довольно новичок в PowerShell, и мне нужно помочь коллеге найти все файлы в папке, содержащей слово /Documents/.

Выходные данные должны быть в текстовом файле, содержащем как путь, так и строку в этом файле.

Для начала мне удалось извлечь пути, используя следующий код. Но я не могу включить следующие строки:

$path = 'C:\Users\XXX' $Text =”/Documents/" $PathArray = @()  Get-ChildItem $path -Filter *.rdl -Recurse | ForEach-Object {  If (Get-Content $_.FullName | Select-String -Pattern $Text ){ $PathArray += $_.FullName $PathArray += $_.FullName  #write-Host "jhk" } $PathArray | % {$_} | Out-File "C:\Users\XX\tes2.txt"-Append } Write-Host "Contents of ArrayPath:" $PathArray | ForEach-Object {$_} 

Этот код работает, но, как уже было сказано, я не уверен, как добавить строки.

0
Где вы хотите добавить какие строки? harrymc 5 лет назад 0
Простой `gci 'C: \ Users \ xxx \ *. Rdl' -r | sls -Pattern '/ Documents /'` должен уже делать то, что вы хотите. LotPings 5 лет назад 0
Я хочу добавить строку для каждого файла, который содержит строку «документы». Но я не могу заставить его работать. Вывод должен быть в двух столбцах, если это возможно. Один с путем к файлу, а другой со строкой, содержащей строку. Nora Seinfield 5 лет назад 0

1 ответ на вопрос

0
postanote

Крайне важно, чтобы, если вы новичок, вы сначала потратили время на наращивание, чтобы предотвратить массу ненужных разочарований и путаницы, с которыми вы столкнетесь.

Выполните поиск в Microsoft Virtual Academy на PowerShell и YouTube, чтобы получить бесплатное видео-обучение.

Вот некоторые другие ресурсы и советы:

  • Бесплатные электронные книги доступны на этом сайте
  • Прочитайте полный файл справки для любого командлета, который вы пытаетесь использовать
  • Практика с примерами
  • Прочитайте файл справки еще раз
  • Подберите несколько хороших книг, например, «PowerShell за месяц обедов» .
  • На веб-сайтах Microsoft и многих других есть много бесплатных электронных книг PowerShell.

Смотрите также: Руководство по выживанию PowerShell

Что касается конкретного примера по вашему вопросу. Как насчет этого подхода?

$searchWords = 'Hello','Client'  Foreach ($sw in $searchWords) { Get-Childitem -Path "d:\temp" -Recurse -include "*.txt","*.csv" |  Select-String -Pattern "$sw" |  Select Path,LineNumber,@} }   # Partial Results  Path LineNumber SearchWord ---- ---------- ---------- D:\temp\Duplicates\BeforeRename1\PsGet.txt 157 Hello  D:\temp\Duplicates\BeforeRename1\PsGet.txt 161 Hello  D:\temp\Duplicates\BeforeRename1\StringText.txt 1 Hello  D:\temp\Duplicates\PoSH\PsGet.txt 157 Hello  D:\temp\Duplicates\PoSH\PsGet.txt 161 Hello  D:\temp\Duplicates\PoSH\StringText.txt 1 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\WindowsFeat... 92 Client  D:\temp\Duplicates\BeforeRename1\WindowsFeat... 94 Client  D:\temp\Duplicates\BeforeRename1\WindowsFeat... 149 Client  D:\temp\Duplicates\BeforeRename1\WindowsFeat... 157 Client  D:\temp\Duplicates\BeforeRename1\WindowsFeat... 191 Client  D:\temp\Duplicates\BeforeRename1\WindowsFeat... 239 Client  D:\temp\Duplicates\BeforeRename1\WindowsFeat... 241 Client