Домой Системный администратор Как искать строки текста в файлах с помощью PowerShell

Как искать строки текста в файлах с помощью PowerShell

56
Как искать строки текста в файлах с помощью PowerShell
Как искать строки текста в файлах с помощью PowerShell

Если вы пытаетесь найти файл, содержащий определённую строку текста, с помощью PowerShell, вы обратились по адресу.

Я покажу вам, как именно найти то, что вы ищете, с помощью команды Select-String и простого PowerShell-скрипта.

Как использовать командлет Select-String в PowerShell

Командлет Select-String используется в PowerShell для поиска текстовых шаблонов.

Системный администратор

Обычно его применяют для поиска строк в файлах, но он также может использоваться для поиска строк из других источников.

Простой пример использования Select-String:

Get-Command | Select-String -Pattern 'Appx' -SimpleMatch
Как искать строки текста в файлах с помощью PowerShell
Как искать строки текста в файлах с помощью PowerShell

В этом примере мы передаём результаты команды Get-Command в Select-String и фильтруем их по шаблону ‘Appx’.

Мы добавляем параметр -SimpleMatch, чтобы команда не интерпретировала шаблон как регулярное выражение, что по умолчанию делает Select-String.

В итоге этот пример возвращает все команды PowerShell, в названии которых есть строка ‘Appx’.

Как найти строку текста в файле с помощью PowerShell

Как я упомянул ранее, одной из основных задач команды Select-String является поиск строк текста в файле.

Начнём с простого примера:

Select-String -Path 'C:\temp\*.csv' -Pattern 'Bart.Simpson' -SimpleMatch
Как найти строку текста в файле с помощью PowerShell

В этом примере мы ищем файлы с шаблоном строки ‘Bart.Simpson’.

В качестве пути мы указываем каталог C:\temp, специально ищем файлы с расширением .csv.

Как видно на скриншоте, мы нашли совпадение на строке 4 в файле Usernames.csv.

Если найдено несколько источников, соответствующих шаблону, команда вернёт каждый из них.

Чтобы продемонстрировать это, я выполню команду снова, но на этот раз добавлю второй файл, содержащий искомый шаблон.

Как искать строки текста в файлах с помощью PowerShell
Как искать строки текста в файлах с помощью PowerShell

Теперь команда возвращает оба источника, где была найдена строка.

Как искать в подкаталогах строку с помощью PowerShell

Если вы знакомы с PowerShell, вы, вероятно, использовали параметр -Recurse для поиска в подкаталогах.

Однако команда Select-String не поддерживает параметр -Recurse.

Но это не проблема, потому что мы можем использовать Get-ChildItem с параметром -Recurse, а затем передать результаты в команду Select-String.

Пример:

Get-ChildItem -Path 'C:\temp\*.csv' -Recurse | Select-String -Pattern 'Bart.Simpson' -SimpleMatch
Как искать строки текста в файлах с помощью PowerShell
Как искать строки текста в файлах с помощью PowerShell

В этом примере мы используем команду 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
Как найти дату с помощью Select-String и регулярных выражений в PowerShell
Как найти дату с помощью Select-String и регулярных выражений в PowerShell

Результаты вернули совпадение с форматом даты в строке 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
Как найти строки в журналах событий Windows с помощью Select-String
Как найти строки в журналах событий Windows с помощью Select-String

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