Если вы пытаетесь найти файл, содержащий определённую строку текста, с помощью PowerShell, вы обратились по адресу.
Я покажу вам, как именно найти то, что вы ищете, с помощью команды Select-String и простого PowerShell-скрипта.
Как использовать командлет Select-String в PowerShell
Командлет Select-String используется в PowerShell для поиска текстовых шаблонов.
Обычно его применяют для поиска строк в файлах, но он также может использоваться для поиска строк из других источников.
Простой пример использования Select-String:
Get-Command | Select-String -Pattern 'Appx' -SimpleMatch

В этом примере мы передаём результаты команды Get-Command в Select-String и фильтруем их по шаблону ‘Appx’.
Мы добавляем параметр -SimpleMatch, чтобы команда не интерпретировала шаблон как регулярное выражение, что по умолчанию делает Select-String.
В итоге этот пример возвращает все команды PowerShell, в названии которых есть строка ‘Appx’.
Как найти строку текста в файле с помощью PowerShell
Как я упомянул ранее, одной из основных задач команды Select-String является поиск строк текста в файле.
Начнём с простого примера:
Select-String -Path 'C:\temp\*.csv' -Pattern 'Bart.Simpson' -SimpleMatch

В этом примере мы ищем файлы с шаблоном строки ‘Bart.Simpson’.
В качестве пути мы указываем каталог C:\temp, специально ищем файлы с расширением .csv.
Как видно на скриншоте, мы нашли совпадение на строке 4 в файле Usernames.csv.
Если найдено несколько источников, соответствующих шаблону, команда вернёт каждый из них.
Чтобы продемонстрировать это, я выполню команду снова, но на этот раз добавлю второй файл, содержащий искомый шаблон.

Теперь команда возвращает оба источника, где была найдена строка.
Как искать в подкаталогах строку с помощью PowerShell
Если вы знакомы с PowerShell, вы, вероятно, использовали параметр -Recurse для поиска в подкаталогах.
Однако команда Select-String не поддерживает параметр -Recurse.
Но это не проблема, потому что мы можем использовать Get-ChildItem с параметром -Recurse, а затем передать результаты в команду Select-String.
Пример:
Get-ChildItem -Path 'C:\temp\*.csv' -Recurse | Select-String -Pattern 'Bart.Simpson' -SimpleMatch

В этом примере мы используем команду Get-ChildItem для определения пути к каталогу и используем параметр -Recurse, чтобы включить подкаталоги.
Результаты затем передаются в команду Select-String.
Нам не нужно повторно определять путь, так как он уже был установлен в предыдущей команде.
Этот пример вернул два результата: один в каталоге C:\temp\ и другой в подкаталоге C:\temp\Department Info\Marketing\.
Как найти дату с помощью Select-String и регулярных выражений в PowerShell
Иногда вы не знаете точные данные, которые ищете.
Возможно, вы знаете только формат данных, которые пытаетесь найти.
В таких случаях на помощь приходят регулярные выражения (regex).
Вот пример, который использует Select-String и регулярное выражение для поиска строк, соответствующих формату MM/DD/YYYY:
# Устанавливаем шаблон regex для определения формата MM/DD/YYYY и сохраняем его в переменной
$dateRegex = '(0[1-9]|1[012])[- /.](0[1-9]|[12][0-9]|3[01])[- /.](19|20)[0-9]{2}'
Select-String -Path 'C:\temp\*.csv' -Pattern $dateRegex

Результаты вернули совпадение с форматом даты в строке 1 файла по пути C:\temp\Patch Tuesday 2024-Aug.csv.
Найденная строка — дата 08/13/2024.
Обратите внимание, что мы не использовали параметр -SimpleMatch, чтобы регулярное выражение было правильно интерпретировано.
Как найти строки в журналах событий Windows с помощью Select-String
Ещё один полезный случай использования командлета Select-String — это поиск определённых строк в журналах событий Windows.
Вот пример того, как искать строку в журналах событий Windows с помощью командлета Select-String:
$logs = Get-WinEvent -LogName Setup -MaxEvents 50
$logs | Select-String -InputObject {$_.Message} -Pattern 'KB5044020' -SimpleMatch

В этом примере мы получаем 50




















