Powershell поиск по содержимому файла

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

Powershell поиск по содержимому файла

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

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

$Files = (dir “C:\Program Files\Microsoft\Exchange Server\V15\TransportRoles\Logs\FrontEnd” -Recurse -Filter “*.log” ).FullName

$Files = (dir “C:\Program Files\Microsoft\Exchange Server\V15\TransportRoles\Logs\FrontEnd” -Recurse -Filter “*.log” ).FullName

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

Get-Content $Files | Select-String “sendreports” | ? { $_ -match “2018-11-16” }

Get-Content $Files | Select-String “sendreports” | ? { $_ -match “2018-11-16” }

Но лучше указывать объект с данными в виде аргумента InputObject, так как это выполняется гораздо быстрее:

Select-String -InputObject $(Get-Content $Files) -Pattern “sendreports” | ? { $_ -match “2018-11-16” }

Select-String -InputObject $(Get-Content $Files) -Pattern “sendreports” | ? { $_ -match “2018-11-16” }

В поисках производительности

Если замерить скорость выполнения этой команды, то она будет крайне не высокой:

Measure-Command { Get-Content $Files | Select-String “sendreports” | ? { $_ -match “2018-11-16” } } # 260 Seconds

    Get-Content $Files | Select-String “sendreports” | ? { $_ -match “2018-11-16” }

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

# Measure-Command показывает что такая команда выполняется в 20 раз быстрее предыдущей Measure-Command { Select-String -Path $Files -Pattern “sendreports” | ? { $_ -match “2018-11-16” } } # 12 Seconds

# Measure-Command показывает что такая команда выполняется в 20 раз быстрее предыдущей    Select-String -Path $Files -Pattern “sendreports” | ? { $_ -match “2018-11-16” }

Workflow

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

$Files = ( dir “C:\Program Files\Microsoft\Exchange Server\V15\TransportRoles\Logs\FrontEnd” -Recurse -Filter “*.log” ).FullName workflow FindString($Files){ foreach -parallel ($file in $workflow:files){ (Select-String -Path $file -Pattern “sendreports” ).line | Write-Output } } Measure-Command { FindString $Files | ? { $_ -match “2018-11-16” } } # 18 Seconds

$Files = ( dir “C:\Program Files\Microsoft\Exchange Server\V15\TransportRoles\Logs\FrontEnd” -Recurse -Filter “*.log” ).FullNameworkflow FindString($Files){    foreach -parallel ($file in $workflow:files){     (Select-String -Path $file -Pattern “sendreports” ).line | Write-Output } }Measure-Command { FindString $Files | ? { $_ -match “2018-11-16” } } # 18 Seconds

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

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

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

workflow FindString{ $Files = ( dir “C:\Program Files\Microsoft\Exchange Server\V15\TransportRoles\Logs\FrontEnd” -Recurse -Filter “*.log” ).FullName $yourData = @() parallel { $workflow:yourData += inlinescript{ Select-String -Path $using:Files -Pattern “sendreports” | ? { $_ -match “2018-11-16” }}} $yourData.line }; Measure-Command { FindString } # 7 Seconds

$Files = ( dir “C:\Program Files\Microsoft\Exchange Server\V15\TransportRoles\Logs\FrontEnd” -Recurse -Filter “*.log” ).FullNameparallel { $workflow:yourData += inlinescript{ Select-String -Path $using:Files -Pattern “sendreports” | ? { $_ -match “2018-11-16” }}}}; Measure-Command { FindString } # 7 Seconds

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

https://www.youtube.com/watch?v=RNHoMF2qSS0

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

Источник: https://administra.top/powershell-poisk-v-tekste/

Как найти файл по содержимому

Powershell поиск по содержимому файла

Привет, друзья. В этой публикации рассмотрим такой вопрос: как найти файл по содержимому. Т.е. по каким-то отдельным ключевым словам или словосочетаниям.

Если вам нужно найти на своём компьютере какой-то документ или текстовый файл, при этом вы не помните его название, но вам чётко врезались в память отдельные слова или фразы с этого документа, вы найдёте этот документ.

Правда, поиск в проводнике Windows для этих целей не годится, его лучше использовать только для поиска данных по ключевым фразам в названиях файлов. Для поиска по текстовому содержимому файлов необходимо прибегнуть к различным сторонним программам. И мы рассмотрим несколько таких – Total Commander, Everything, Archivarius 3000.

Друзья, к рассмотрению темы, как найти файл по содержимому, меня подтолкнула просьба о помощи одного читателя сайта:

Здравствуйте, админ. Проблема такая: срочно нужно найти файл по его содержимому среди целой кучи других похожих файлов, находящихся на жёстком диске моего компьютера.

У меня на диске D находится много папок с файлами, и среди них есть текстовый файл с решением одной математической задачи. Но я помню только часть исходных данных y0= (4*2-22)/4=1, более ничего не помню. Расширение файла тоже не помню, это может быть «.txt», «.doc», «.xlsx», «.

ttf» и даже «.phtml» или «.php3». Пробовал применить программу Multi Text Finder, но она ничего не нашла.

Программа Multi Text Finder, друзья, с виду вроде бы серьёзная, в ней можно выбирать типы документов для поиска, ключевые слова для поиска по содержимому документов, можно использовать маски поиска.

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

Я указал место поиска, ввёл ключевое слово, запустил поиск. Но поиск ничего не обнаружил.

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

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

Примечание: друзья, проводник Windows не ищет файлы по их внутреннему содержимому, но у него есть иные критерии поиска, с помощью которых вы можете сузить область поиска нужного вам файла. Как работать с поиском в системном проводнике, смотрите в статье «Как найти файл на компьютере».

Поиск файлов по ключевым словам в их тексте предусматривает функциональный файловый менеджер Total Commander.

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

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

Как найти файл по содержимому в Total Commander? На его панели инструментов есть кнопка поиска файлов, кликаем её. Или можем использовать горячие клавиши Alt+F7.

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

Если же мы активируем графу «С текстом» и в неё впишем ключевой запрос, то поиск будет выполняться по содержимому файлов. Что, собственно, и нужно нам. Вписываем в графу «С текстом» те слова или фразы, которые мы помним.

И жмём «Начать поиск».

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

А вот и сам файл.

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

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

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

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

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

Итак, программа Everything. Дабы искать в ней файлы по названиям, вводим ключевое слово из названия в поле программы в её главном окне.

Если же мы хотим найти файл, содержащий текст, в меню «Поиск» запускаем «Расширенный поиск».

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

И, вуаля – файл найден.

И ещё одну программу, друзья, рассмотрим, которая может найти файлы, содержащие текст, какой мы помним – это программа Archivarius 3000.

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

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

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

Механизм поиска у Archivarius 3000 такой, как у поисковых систем: программный поисковик ищет файлы не только с прямым вхождением наших ключевых запросов, но также с изменёнными словоформами, т.е.

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

Друзья, программа очень серьёзная, у неё настраиваемый механизм индексации, собственный просмотрщик документов.

Более того, программа даже может обеспечивать удалённый доступ к нашей базе документов по принципу сервера, и мы сможем искать файлы на нашем компьютере, будучи далеко от него, по сути, из любой точки мира. Так что в нескольких словах об этой программе не расскажешь, она достойна отдельного обзора. Покажу лишь, как пользоваться настроенной программой.

Как найти файл по содержимому с использованием Archivarius 3000? Вводим ключевой запрос, будь это слова из названия, будь это слова в тексте документа. И отсматриваем результаты поиска. Смотрим, где встречается все слова из нашего запроса.

При необходимости можем задействовать фильтры поиска – атрибуты в терминологии самой программы.

Метки к статье: Программы

Источник: https://remontcompa.ru/programmnyy-funkcional/2096-kak-najti-fajl-po-soderzhimomu.html

PowerShell: Поиск файлов

Powershell поиск по содержимому файла
Как выполнить поиск файлов в командной оболочке PowerShell?

Поиск файлов в PowerShell осуществляется с помощью командлета Get-ChildItem. Вызов данного командлета без аргументов выполнит вывод содержимого текущей директории.
У данного командлета присутствуют несколько псевдонимов (aliases) – ls, dir, gci.

Разберем аргументы командлета позволяющие выполнить поиск файлов.
Аргументы командлета Get-ChildItem позволяют выполнить поиск файлов. Доступные параметры, маска имени файла (-Filter), стартовая директория поиска (-Path), и возможность рекурсивного поиска в поддиректориях (-Recurse).

Поиск по маске, для примера осуществим вывод всех файлов с расширением ZIP.

# Вывод файлов с раширением *.zipGet-ChildItem *.zip

Файловые маски не могут содержать регулярных выражений, только стандартные “*” (любое количество символов) и “?” (один любой символ).# Вывод файлов с раширением *.zip и именем состоящим из трех символовGet-ChildItem ???.zip

Как можно заметить, указывать параметр -Filter не обязательно, командлет сам понимает что ему была передана фильтрующая маска. Порядок следования параметров без их конкретного указания можно посмотреть во встроенной справке.# Вывод справкиGet-ChildItem -?

Параметр -Path позволяет задать путь начала поиска. Так же он допускает использовать символы файловых масок. Можно совмещать комбинацию фильтров в параметре -Path и -Filter.

Выведем содержимое диска C:\.

# Вывод содержимого указанной директорииGet-ChildItem C:\ # То же самое что и выше, но с прямым указанием параметраGet-ChildItem -Path C:\

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

Попробуем найти все файлы с расширением *.msc на диске C:\.

# Вывод всех файлов *.msc на диске C:\Get-ChildItem -Path C:\ -Filter *.msc -Recurse -ErrorAction SilentlyContinue

Как вы могли заметить, при выводе содержимого диска C:\ отсутствовали скрытые файлы. Отображение скрытых и системных файлов задается атрибутами, о которых поговорим далее.
По умолчанию, скрытые файлы не попадают выходной список командлета Get-ChildItem. Вывод файлов с различными атрибутами, такими как скрытый, системный и прочее, можно задать с помощью параметра -Attributes.

Возможные значения для данного параметра можно посмотреть во встроенной справке по командлету (Get-ChildItem -?).

Важные, или популярные, атрибуты вынесены в отдельные параметры, а именно -Directory, -File, -System, -Hidden.

Попробуем посмотреть файлы скрытые файлы на диске C:\.# Вывод файлов диска C:\Get-ChildItem C:\ # Вывод файлов диска C:\ включая скрытыеGet-ChildItem C:\ -Hidden

При указании параметра -Hidden выводятся только скрытые файлы и папки.

С параметром -Attributes все иначе. Он позволяет комбинировать файловые атрибуты. Доступны три операции:

!NOT, исключает файлы с данным атрибутом (!Directory)

+ – AND, включает файлы со всеми указанными атрибутами (System+Hidden)
,OR, включает файлы с хотя бы с одним указанным атрибутом (System, Hidden, Directory) Модификаторы можно комбинировать.# Вывод файлов диска C:\ с атрибутами – скрытый, системный, директорииGet-ChildItem C:\ -Attributes H,S,D
Сами названия атрибутов можно сокращать, что собственно и было продемонстрировано выше.
Список файлов полученный с помощью вышеописанных способов можно отфильтровать по дате. Делается это с помощью передачи результатов выполнения командлета Get-ChildItem командлету Where-Object. Пример фильтрации вывода команды по дате, с применением псевдонимов.# Вывод файлов дата которых больше или равна дате 28.10.2019 20:00ls | ? LastAccessTime -GE (Get-Date “28.10.2019 20:00”)

Для командлета Where-Object можно задать так же другие условия, или даже несколько условий. Подробнее об этом можно узнать в справке по данному командлету.
Поиск по содержимому, предполагает обход всех файлов с целью найти в них искомый текст. Выполнить данную операцию можно с помощью передачи всех файлов по конвейеру командлету Select-String. Для примера я создал три текстовых файла с текстом: 1.txt (first)2.txt (second)3.txt (first second third) Структура расположения файлов следующая.
Теперь примеры поиска текста в данных файлах с помощью PowerShell.# Поиск всех файлов с текстом “first”Get-ChildItem -Recurse | Select-String “first”

Вывод данной команды немного скудный, нет информации о файлах. Это легко поправить, выполнив передачу полученных данных снова командлету Get-ChildItem. На этот раз воспользуемся псевдонимами для сокращения ввода команд.# Поиск всех файлов с текстом “first” с подробным выводом информации о файлахls -r | Select-String “first” | ls

Полученные списки файлов, всеми вышеописанными способами, можно передавать по конвейеру таким командлетам как Remove-Item, Move-ItemCopy-Item и прочим подобным. Тем самым упрощая работу с полученными файлами.
В статье было рассмотрено: Как выполнить поиск файлов в командной оболочке PowerShell? “,”author”:”Автор: BootDev”,”date_published”:”2021-01-08T21:46:00.000Z”,”lead_image_url”:”https://1.bp.blogspot.com/-1o9bzsenTN4/XcBjsbath3I/AAAAAAAAGkM/EzB9zePn7moLYTWJgg6IrgB73oR2d9R2wCLcBGAsYHQ/w1200-h630-p-k-no-nu/scr_2019_11_04_008.png”,”dek”:null,”next_page_url”:null,”url”:”https://www.bootdev.ru/2019/11/PowerShell-File-Search.html”,”domain”:”www.bootdev.ru”,”excerpt”:”Поиск файлов с помощью PowerShell.”,”word_count”:675,”direction”:”ltr”,”total_pages”:1,”rendered_pages”:1}

Источник: https://www.bootdev.ru/2019/11/PowerShell-File-Search.html

Поделиться:
Нет комментариев

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

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