Powershell. Поиск в тексте

Иногда есть необходимость найти файл, по содержащимся в нем словам, или же найти все строки содержащие нужный паттерн.
Рассмотрим несколько вариантов поиска по тексту в Powershell

Для примера я буду искать в логах Exchange 2013 нужного мне отправителя

Использовать командлет Select-String можно разными способами. Например подавать содержимое файлов через конвейер:

Как видно это весьма медленный вариант.

Указывая список файлов аргументом Select-String мы получим значительный прирост скорости поиска.

Workflow

Я попробовал несколько вариантов использования Select-String  в Workflow.
Сначала вариант с циклом:

Так как командлет Where-Object неподдерживается в Workflow,
то фильтры можно вынести либо за его пределы,
или же поместить в InlineScript

На удивление, никакого прироста скорости поиска я не получил, даже увеличивая значение «-throttlelimit»

Самым быстрый вариант

Здесь в блоке parallel мы, используя InlineScript, заносим результат Select-String в массив

Не могу объяснить за счет чего именно достигается увеличение скорости поиска, тем не менее, при необходимости найти документ или строки в большом объеме данных, можно использовать эту конструкцию.
Можно искать по всем дискам компьютера, или же и вовсе по списку компьютеров.
Думаю в этом случае мы получим прирост по времени, значительно больший чем 3 секунды

Share on VKShare on FacebookTweet about this on TwitterShare on Google+Pin on PinterestEmail this to someone

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *