В мире Linux/Unix для поиска определенного текста или ошибок в лог файлах используется команда grep. Grep позволяет быстро и удобно найти/выбрать любых данные из результатов выполнения другой команды:
command | grep search
В PowerShell для поиска текста в файлах можно использовать командлет Select-String.
Например, следующая команда выведет все строки текстового файла, содержащие ключевую фразу ERROR:
Select-String -Path c:\tmp\makeapp_sxtracesxs.txt -Pattern "ERROR"
Команда вывела номера строк, в которых содержится искомый тескт и их содержимое.
Если вам нужно выполнить поиск вхождения строки по всем txt файлам в определенном каталоге, выполните команду:
Select-String -Path c:\tmp\*.txt -Pattern "ERROR"
Такую команду удоно исопльзовать, если нужно выполнить поиск по всем файлам в каталоге. Например, для поиска в транспортных логах/smtp Exchange.
С помощью опций Exclude/Include можно включить, исключить определенннные файлы для поиска. Следующий пример выполнит поиск по всем txt и log файлам, имя которых не содежит copy:
$path = "c:\tmp\*"
Select-String -Path $path -Pattern "ERROR" -Include "*.txt","*.log" -Exclude "*copy*"
Предудущий пример выполняет поиск текста только в указанном каталоге. Для рекурсивного поиска по файлам во вложенных каталогах используйте Get-ChildItem:
Get-ChildItem -Path 'c:\tmp\' -Recurse -include "*.mp3","*.avi" -ErrorAction SilentlyContinue | Select-String -SimpleMatch "ERROR","WARNING"