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

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

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

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

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

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

Workflow

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

Сначала вариант с циклом:

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

Самым быстрым оказался следующий вариант:

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

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

 

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

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

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