Поделиться через


Select-String

Выполняет поиск текста в строках и файлах.

Синтаксис

Select-String
      [-Pattern] <String[]>
      [-Path] <String[]>
      [-SimpleMatch]
      [-CaseSensitive]
      [-Quiet]
      [-List]
      [-Include <String[]>]
      [-Exclude <String[]>]
      [-NotMatch]
      [-AllMatches]
      [-Encoding <String>]
      [-Context <Int32[]>]
      [<CommonParameters>]
Select-String
      -InputObject <PSObject>
      [-Pattern] <String[]>
      [-SimpleMatch]
      [-CaseSensitive]
      [-Quiet]
      [-List]
      [-Include <String[]>]
      [-Exclude <String[]>]
      [-NotMatch]
      [-AllMatches]
      [-Encoding <String>]
      [-Context <Int32[]>]
      [<CommonParameters>]
Select-String
      [-Pattern] <String[]>
      -LiteralPath <String[]>
      [-SimpleMatch]
      [-CaseSensitive]
      [-Quiet]
      [-List]
      [-Include <String[]>]
      [-Exclude <String[]>]
      [-NotMatch]
      [-AllMatches]
      [-Encoding <String>]
      [-Context <Int32[]>]
      [<CommonParameters>]

Описание

Командлет Select-String использует сопоставление регулярных выражений для поиска текстовых шаблонов в входных строках и файлах. Вы можете использовать Select-String аналогию grep с UNIX или findstr.exe в Windows.

Select-String основан на строках текста. По умолчанию Select-String находит первое совпадение в каждой строке и для каждого совпадения отображается имя файла, номер строки и весь текст в строке, содержащей совпадение. Вы можете Select-String найти несколько совпадений на строку, отобразить текст до и после совпадения или отобразить логическое значение (True или False), указывающее, найден ли совпадение.

Select-String может отображать все совпадения текста или останавливаться после первого совпадения в каждом входном файле. Select-String можно использовать для отображения всего текста, который не соответствует указанному шаблону.

Можно также указать, что Select-String следует ожидать определенной кодировки символов, например при поиске файлов текста Юникода. Select-String использует метку байтового порядка (BOM) для обнаружения формата кодирования файла. Если файл не имеет BOM, предполагается, что кодировка — UTF8.

Примеры

Пример 1. Поиск соответствия с учетом регистра

В этом примере учитывается регистр текста, отправленного по конвейеру командлету Select-String .

'Hello', 'HELLO' | Select-String -Pattern 'HELLO' -CaseSensitive -SimpleMatch

Текстовые строки Hello и HELLO отправляются по конвейеру командлету Select-String . Select-Stringиспользует параметр Pattern для указания HELLO. Параметр CaseSensitive указывает, что регистр должен соответствовать только шаблону верхнего регистра. SimpleMatch является необязательным параметром и указывает, что строка в шаблоне не интерпретируется как регулярное выражение. Select-String отображает HELLO в консоли PowerShell.

Пример 2. Поиск совпадений в текстовых файлах

Эта команда выполняет поиск всех файлов с расширением .txt имени файла в текущем каталоге. Выходные данные отображают строки в этих файлах, включающих указанную строку.

Get-Alias | Out-File -FilePath .\Alias.txt
Get-Command | Out-File -FilePath .\Command.txt
Select-String -Path .\*.txt -Pattern 'Get-'

Alias.txt:8:Alias            cat -> Get-Content
Alias.txt:28:Alias           dir -> Get-ChildItem
Alias.txt:43:Alias           gal -> Get-Alias
Command.txt:966:Cmdlet       Get-Acl
Command.txt:967:Cmdlet       Get-Alias

В этом примере Get-Alias используется Get-Command командлет для Out-File создания двух текстовых файлов в текущем каталоге, Alias.txt и Command.txt.

Select-Stringиспользует параметр Path со звездочкой (*) для поиска всех файлов в текущем каталоге с расширением .txtимени файла. Параметр Pattern указывает текст, соответствующий Get-. Select-String отображает выходные данные в консоли PowerShell. Имя файла и номер строки предшествуют каждой строке содержимого, содержащей совпадение для параметра Pattern .

Пример 3. Поиск соответствия шаблона

В этом примере выполняется поиск нескольких файлов, чтобы найти совпадения для указанного шаблона. Шаблон использует квантификатор регулярных выражений. Дополнительные сведения см. в about_Regular_Expressions.

Select-String -Path "$PSHOME\en-US\*.txt" -Pattern '\?'

C:\Program Files\PowerShell\6\en-US\default.help.txt:27:    beginning at https://go.microsoft.com/fwlink/?LinkID=108518.
C:\Program Files\PowerShell\6\en-US\default.help.txt:50:    or go to: https://go.microsoft.com/fwlink/?LinkID=210614

Командлет Select-String использует два параметра, путь и шаблон. Параметр Path использует переменную $PSHOME , указывающую каталог PowerShell. Оставшаяся часть пути включает подкаталог en-US и указывает каждый *.txt файл в каталоге. Параметр Pattern указывает соответствие вопросительного знака (?) в каждом файле. Обратная косая черта (\) используется в качестве escape-символа и необходима, так как вопросительный знак (?) является квантификатором регулярных выражений. Select-String отображает выходные данные в консоли PowerShell. Имя файла и номер строки предшествуют каждой строке содержимого, содержащей совпадение для параметра Pattern .

Пример 4. Использование select-String в функции

В этом примере создается функция для поиска шаблона в файлах справки PowerShell. В этом примере функция существует только в сеансе PowerShell. При закрытии сеанса PowerShell функция удаляется. Дополнительные сведения см. в about_Functions.

function Search-Help
{
    $PSHelp = "$PSHOME\en-US\*.txt"
    Select-String -Path $PSHelp -Pattern 'About_'
}

Search-Help

C:\Windows\System32\WindowsPowerShell\v1.0\en-US\about_ActivityCommonParameters.help.txt:2:   about_ActivityCommonParameters
C:\Windows\System32\WindowsPowerShell\v1.0\en-US\about_ActivityCommonParameters.help.txt:31:  see about_WorkflowCommonParameters.
C:\Windows\System32\WindowsPowerShell\v1.0\en-US\about_ActivityCommonParameters.help.txt:33:  about_CommonParameters.

Функция создается в командной строке PowerShell. Команда Function использует имя Search-Help. Нажмите клавишу ВВОД , чтобы начать добавление инструкций в функцию. В командной строке >> добавьте каждую инструкцию и нажмите клавишу ВВОД , как показано в примере. После добавления закрывающей скобки вы вернеесь в запрос PowerShell.

Функция содержит две команды. Переменная $PSHelp сохраняет путь к файлам справки PowerShell. $PSHOME — каталог установки PowerShell с подкаталогом en-US , который указывает каждый *.txt файл в каталоге.

Команда Select-String в функции использует параметры Path и Pattern . Параметр Path использует $PSHelp переменную для получения пути. Параметр Pattern использует строку About_ в качестве критерия поиска.

Чтобы запустить функцию, введите Search-Help. Команда функции Select-String отображает выходные данные в консоли PowerShell.

Пример 5. Поиск строки в журнале событий Windows

В этом примере выполняется поиск строки в журнале событий Windows. Переменная $_ представляет текущий объект в конвейере. Дополнительные сведения см. в статье about_Automatic_Variables.

$Events = Get-WinEvent -LogName Application -MaxEvents 50
$Events | Select-String -InputObject {$_.message} -Pattern 'Failed'

Командлет Get-WinEvent использует параметр LogName для указания журнала приложения. Параметр MaxEvents получает из журнала 50 последних событий. Содержимое журнала хранится в переменной с именем $Events.

Переменная $Events отправляется по конвейеру командлету Select-String . Select-Stringиспользует параметр InputObject. Переменная $_ представляет текущий объект и message является свойством события. Параметр Pattern указывает строку failed и выполняет поиск совпадений в $_.message. Select-String отображает выходные данные в консоли PowerShell.

Пример 6. Поиск строки в подкаталогах

В этом примере выполняется поиск каталога и всех его подкаталогов для определенной текстовой строки.

Get-ChildItem -Path C:\Windows\System32\*.txt -Recurse | Select-String -Pattern 'Microsoft' -CaseSensitive

Get-ChildItemиспользует параметр Path для указания C:\Windows\System32*.txt. Параметр Recurse включает вложенные каталоги. Объекты отправляются вниз конвейера Select-String.

Select-Stringиспользует параметр Pattern и задает строку Майкрософт. Параметр CaseSensitive используется для сопоставления точного случая строки. Select-String отображает выходные данные в консоли PowerShell.

Примечание.

В зависимости от ваших разрешений в выходных данных могут отображаться сообщения, отказано в доступе.

Пример 7. Поиск строк, которые не соответствуют шаблону

В этом примере показано, как исключить строки данных, которые не соответствуют шаблону.

Get-Command | Out-File -FilePath .\Command.txt
Select-String -Path .\Command.txt -Pattern 'Get', 'Set'  -NotMatch

Командлет Get-Command отправляет объекты вниз конвейера Out-File , чтобы создать файл Command.txt в текущем каталоге. Select-Stringиспользует параметр Path для указания файла Command.txt. Параметр Pattern указывает Get и Set в качестве шаблона поиска. Параметр NotMatch исключает Get и Set из результатов. Select-String отображает выходные данные в консоли PowerShell, которая не включает get или Set.

Пример 8. Поиск строк до и после совпадения

В этом примере показано, как получить строки до и после соответствующего шаблона.

Get-Command | Out-File -FilePath .\Command.txt
Select-String -Path .\Command.txt -Pattern 'Get-Computer' -Context 2, 3

Command.txt:1186:Cmdlet          Get-CmsMessage            3.0.0.0    Microsoft.PowerShell.Security
  Command.txt:1187:Cmdlet          Get-Command               3.0.0.0    Microsoft.PowerShell.Core
> Command.txt:1188:Cmdlet          Get-ComputerInfo          3.1.0.0    Microsoft.PowerShell.Management
> Command.txt:1189:Cmdlet          Get-ComputerRestorePoint  3.1.0.0    Microsoft.PowerShell.Management
  Command.txt:1190:Cmdlet          Get-Content               3.1.0.0    Microsoft.PowerShell.Management
  Command.txt:1191:Cmdlet          Get-ControlPanelItem      3.1.0.0    Microsoft.PowerShell.Management
  Command.txt:1192:Cmdlet          Get-Counter               3.0.0.0    Microsoft.PowerShell.Diagnostics

Командлет Get-Command отправляет объекты вниз конвейера Out-File , чтобы создать файл Command.txt в текущем каталоге. Select-Stringиспользует параметр Path для указания файла Command.txt. Параметр Pattern указывает Get-Computer в качестве шаблона поиска. Параметр Context использует два значения, до и после, а также помечает шаблоны в выходных данных с угловой скобкой (>). Параметр Context выводит две строки перед первым совпадением шаблона и тремя строками после последнего сопоставления шаблона.

Пример 9. Поиск всех совпадений шаблонов

В этом примере показано, как параметр AllMatches находит каждое совпадение шаблона в строке текста. По умолчанию Select-String находит только первое вхождение шаблона в строке текста. В этом примере используются свойства объектов, найденные с помощью командлета Get-Member .

$A = Get-ChildItem -Path "$PSHOME\en-US\*.txt" | Select-String -Pattern 'PowerShell'
$A

C:\Windows\System32\WindowsPowerShell\v1.0\en-US\about_ActivityCommonParameters.help.txt:5:    Describes the parameters that Windows PowerShell
C:\Windows\System32\WindowsPowerShell\v1.0\en-US\about_ActivityCommonParameters.help.txt:9:    Windows PowerShell Workflow adds the activity common

$A.Matches

Groups   : {0}
Success  : True
Name     : 0
Captures : {0}
Index    : 4
Length   : 10
Value    : PowerShell

$A.Matches.Length

2073

$B = Get-ChildItem -Path "$PSHOME\en-US\*.txt" | Select-String -Pattern 'PowerShell' -AllMatches
$B.Matches.Length

2200

Командлет Get-ChildItem использует параметр Path . Параметр Path использует переменную $PSHOME , указывающую каталог PowerShell. Оставшаяся часть пути включает подкаталог en-US и указывает каждый *.txt файл в каталоге. Объекты Get-ChildItem хранятся в переменной $A . Переменная $A отправляется по конвейеру командлету Select-String . Select-Stringиспользует параметр Pattern для поиска каждого файла строки PowerShell.

В командной строке PowerShell отображаются содержимое $A переменной. Существует строка, содержащая два вхождения строки PowerShell.

Свойство $A.Matches перечисляет первое вхождение шаблона PowerShell в каждой строке.

Свойство $A.Matches.Length подсчитывает первое вхождение шаблона PowerShell в каждой строке.

Переменная $B использует те же Get-ChildItem и Select-String командлеты, но добавляет параметр AllMatches . AllMatches находит каждое вхождение шаблона PowerShell в каждой строке. Объекты, хранящиеся в $A переменных, $B идентичны.

Свойство $B.Matches.Length увеличивается, так как для каждой строки учитывается каждое вхождение шаблона PowerShell .

Пример 10. Преобразование объектов конвейера в строки с помощью Out-String

Результат ToString() конвейерного объекта не совпадает с форматированным строковым представлением, созданным системой форматирования PowerShell. Таким образом, сначала может потребоваться передать объекты Out-String .

Пилинг для Out-String преобразования форматированных выходных данных в один многострочный строковый объект. Это означает, что при Select-String поиске совпадения он выводит всю многостроную строку.

PS> $hash = @{
    Name = 'foo'
    Category = 'bar'
}

# !! NO output, due to .ToString() conversion
$hash | Select-String -Pattern 'foo'

# Out-String converts the output to a single multi-line string object
PS> $hash | Out-String | Select-String -Pattern 'foo'

Name                           Value
----                           -----
Name                           foo
Category                       bar

# Out-String -Stream converts the output to a multiple single-line string objects
PS> $hash | Out-String -Stream | Select-String -Pattern 'foo'

Name                           foo

Пилинг для Out-String -Stream преобразования отформатированных выходных данных в несколько однострочных строковых объектов. Это означает, что при Select-String поиске совпадения он выводит только соответствующую строку.

Параметры

-AllMatches

Указывает, что командлет ищет несколько совпадений в каждой строке текста. Без этого параметра находит Select-String только первое совпадение в каждой строке текста.

При Select-String поиске нескольких совпадений в строке текста он по-прежнему выдает только один объект MatchInfo для строки, но свойство Match объекта содержит все совпадения.

Примечание.

Этот параметр игнорируется при использовании в сочетании с параметром SimpleMatch . Если вы хотите вернуть все совпадения и шаблон, который вы ищете, содержит символы регулярных выражений, необходимо экранировать эти символы, а не использовать SimpleMatch. Дополнительные сведения о побеге регулярных выражений см . в about_Regular_Expressions .

Тип:SwitchParameter
Position:Named
Default value:False
Обязательно:False
Принять входные данные конвейера:False
Принять подстановочные знаки:False

-CaseSensitive

Указывает, что совпадения командлета учитывает регистр. По умолчанию совпадения не учитывает регистр.

Тип:SwitchParameter
Position:Named
Default value:False
Обязательно:False
Принять входные данные конвейера:False
Принять подстановочные знаки:False

-Context

Записывает указанное количество строк до и после строки, которая соответствует шаблону.

Если в качестве значения этого параметра вы введете одно число, оно будет определять количество записываемых строк до и после совпадения. Если вы укажете два числа, первое из них будет определять количество строк до совпадения, а второе — после совпадения. Например, -Context 2,3.

В отображении по умолчанию строки со совпадением указываются правой угловой скобкой () (>ASCII 62) в первом столбце дисплея. Строки без пометок формируют контекст.

Параметр Context не изменяет количество объектов, создаваемых с помощью Select-String. Select-String создает один объект MatchInfo для каждого совпадения. Контекст хранится в виде массива строк в свойстве Context объекта.

Когда выходные данные Select-String команды отправляются по конвейеру другой Select-String команде, получение команды выполняет поиск только текста в соответствующей строке. Соответствующая строка — это значение свойства Line объекта MatchInfo, а не текста в строках контекста. В результате параметр Context недействителен в принимающей Select-String команде.

Если контекст включает совпадение, объект MatchInfo для каждого совпадения включает все строки контекста, но перекрывающиеся линии отображаются только один раз в отображении.

Тип:Int32[]
Position:Named
Default value:None
Обязательно:False
Принять входные данные конвейера:False
Принять подстановочные знаки:False

-Encoding

Указывает тип кодировки для целевого файла. Значение по умолчанию — default.

Допустимые значения для этого параметра приведены следующим образом:

  • ascii Использует набор символов ASCII (7-разрядный).
  • bigendianunicode Использует UTF-16 с порядком байтов больших байтов.
  • default Использует кодировку, соответствующую активной кодовой странице системы (обычно ANSI).
  • oem Использует кодировку, соответствующую текущей кодовой странице OEM системы.
  • unicode Использует UTF-16 с маленьким порядком байтов.
  • utf7 Использует UTF-7.
  • utf8 Использует UTF-8.
  • utf32 Использует UTF-32 с маленьким порядком байтов.
Тип:String
Допустимые значения:ASCII, BigEndianUnicode, Default, OEM, Unicode, UTF7, UTF8, UTF32
Position:Named
Default value:Default
Обязательно:False
Принять входные данные конвейера:False
Принять подстановочные знаки:False

-Exclude

Исключает указанные элементы. Значение этого параметра определяет параметр Path. Введите элемент пути или шаблон, например *.txt. Разрешено использовать подстановочные знаки.

Тип:String[]
Position:Named
Default value:None
Обязательно:False
Принять входные данные конвейера:False
Принять подстановочные знаки:True

-Include

Включает указанные элементы. Значение этого параметра определяет параметр Path. Введите элемент пути или шаблон, например *.txt. Разрешено использовать подстановочные знаки.

Тип:String[]
Position:Named
Default value:None
Обязательно:False
Принять входные данные конвейера:False
Принять подстановочные знаки:True

-InputObject

Задает текст для поиска. Укажите переменную, содержащую текст, либо введите команду или выражение, которые его возвращают.

Использование параметра InputObject не совпадает с отправкой строк вниз конвейераSelect-String.

При отправке нескольких строк Select-String командлету выполняется поиск указанного текста в каждой строке и возвращается каждая строка, содержащая текст поиска.

При использовании параметра InputObject для отправки коллекции строк Select-String коллекция обрабатывает коллекцию как одну объединенную строку. Select-String возвращает строки в виде единицы, если он находит текст поиска в любой строке.

Тип:PSObject
Position:Named
Default value:None
Обязательно:True
Принять входные данные конвейера:True
Принять подстановочные знаки:False

-List

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

По умолчанию возвращает объект MatchInfo для каждого найденного совпаденияSelect-String.

Тип:SwitchParameter
Position:Named
Default value:False
Обязательно:False
Принять входные данные конвейера:False
Принять подстановочные знаки:False

-LiteralPath

Указывает путь к файлам для поиска. Значение параметра LiteralPath используется точно так же, как он типизированный. Никакие символы не интерпретируются как знаки подстановки. Если путь содержит escape-символы, заключите его в одинарные кавычки. Одинарные кавычки говорят PowerShell не интерпретировать какие-либо символы как escape-последовательности. Дополнительные сведения см. в about_Quoting_Rules.

Тип:String[]
Aliases:PSPath
Position:Named
Default value:None
Обязательно:True
Принять входные данные конвейера:True
Принять подстановочные знаки:False

-NotMatch

Параметр NotMatch находит текст, который не соответствует указанному шаблону.

Тип:SwitchParameter
Position:Named
Default value:False
Обязательно:False
Принять входные данные конвейера:False
Принять подстановочные знаки:False

-Path

Указывает путь к файлам для поиска. Разрешено использовать подстановочные знаки. По умолчанию поиск выполняется в локальном каталоге.

Укажите файлы в каталоге, например log1.txt, *.docили *.*. Если вы укажете только один каталог, команда завершится сбоем.

Тип:String[]
Position:1
Default value:Local directory
Обязательно:True
Принять входные данные конвейера:True
Принять подстановочные знаки:True

-Pattern

Указывает текст, который нужно найти в каждой строке. Значение шаблона рассматривается как регулярное выражение.

Дополнительные сведения о регулярных выражениях см. в about_Regular_Expressions.

Тип:String[]
Position:0
Default value:None
Обязательно:True
Принять входные данные конвейера:False
Принять подстановочные знаки:False

-Quiet

Указывает, что командлет возвращает простой ответ вместо объекта MatchInfo . Возвращаемое значение — если $true шаблон найден или $null если шаблон не найден.

Тип:SwitchParameter
Position:Named
Default value:False
Обязательно:False
Принять входные данные конвейера:False
Принять подстановочные знаки:False

-SimpleMatch

Указывает, что командлет использует простое совпадение, а не совпадение регулярного выражения. В простом совпадении Select-String выполняется поиск входных данных для текста в параметре Pattern . Он не интерпретирует значение параметра Pattern как инструкцию регулярного выражения.

Кроме того, когда используется SimpleMatch, свойство Match объекта MatchInfo возвращается пусто.

Примечание.

Если этот параметр используется с параметром AllMatches, allMatches игнорируется.

Тип:SwitchParameter
Position:Named
Default value:False
Обязательно:False
Принять входные данные конвейера:False
Принять подстановочные знаки:False

Входные данные

PSObject

Вы можете передать любой объект с методом ToString() в этот командлет.

Выходные данные

MatchInfo

По умолчанию этот командлет возвращает объект MatchInfo для каждого найденного совпадения.

Boolean

При использовании параметра Quiet этот командлет возвращает логическое значение, указывающее, найден ли шаблон.

Примечания

Windows PowerShell включает следующие псевдонимы для Select-String:

  • sls

Select-String аналогичен grep unix или findstr.exe в Windows.

Примечание.

Согласно утвержденным командам PowerShell, официальный префикс псевдонима для Select-* командлетов не slявляетсяsc. Таким образом, правильный псевдоним Select-String должен быть scs, а не sls. Это исключение для этого правила.

При отправке объектов в Select-String:

  • Объекты FileInfo рассматриваются как путь к файлу. Если указаны пути к файлам, Select-String выполняется поиск содержимого файла, а не ToString() представление объекта.
  • Результат ToString() конвейерного объекта не совпадает с форматированным строковым представлением, созданным системой форматирования PowerShell. Таким образом, сначала может потребоваться передать объекты Out-String . Дополнительные сведения см. в примере 10.

Чтобы использовать Select-String, введите текст, который требуется найти в качестве значения параметра Pattern . Чтобы указать текст для поиска, используйте следующие критерии:

  • Введите текст в строке с кавычками, а затем переведите его Select-Stringв .
  • Сохраните текстовую строку в переменной, а затем укажите переменную в качестве значения параметра InputObject .
  • Если текст хранится в файлах, используйте параметр Path , чтобы указать путь к файлам.

По умолчанию Select-String значение параметра Pattern интерпретируется как регулярное выражение. Дополнительные сведения см. в about_Regular_Expressions. Параметр SimpleMatch можно использовать для переопределения сопоставления регулярных выражений. Параметр SimpleMatch находит экземпляры значения параметра Pattern в входных данных.

Выходные данные Select-String по умолчанию — это объект MatchInfo , содержащий подробные сведения о совпадениях. Сведения в объекте полезны при поиске текста в файлах, так как объекты MatchInfo имеют такие свойства, как имя файла и строка. Если входные данные не из файла, значение этих параметров — InputStream.

Если вам не нужны сведения в объекте MatchInfo , используйте параметр Quiet . Параметр Quiet возвращает логическое значение (True или False), указывающее, найден ли он совпадение вместо объекта MatchInfo .

При сопоставлении Select-String фраз использует текущий язык и региональные параметры, заданные для системы. Чтобы найти текущий язык и региональные Get-Culture параметры, используйте командлет.

Чтобы найти свойства объекта MatchInfo , введите следующую команду:

Select-String -Path test.txt -Pattern 'test' | Get-Member | Format-List -Property *