Главная » Статьи » Mail » Exchange. Powershell |
Взято здесь: https://winitpro.ru/index.php/2018/07/20/search-mailbox-poisk-i-udalenie-otdelnyx-pisem-iz-yashhikov-exchange/ Exchange сервер позволяет администратору выполнять поиск по почтовым ящикам пользователей в базах и удалять из ящиков определенные письма (или другие элементы). Например, пользователь ошибся и случайно разослал приватные данные другим пользователям в организации и не успел отозвать сообщение в Outlook. Департамент защиты информации требует, чтобы вы, как администратор Exchange, удалили данное письмо у всех пользователей в вашем организации Exchange. В этой статье мы покажем, как с помощью PowerShell можно выполнять поиск по ящикам пользователей Exchange (по разным критериям) и удалять отдельные письма у конкретного пользователя или у всех пользователей Exchange. Описанные методики применимы для Exchange 2016, 2013 и 2010. Учетной записи администратора, который выполняет поиск и удаление элементов нужно назначить следующие роли: New-ManagementRoleAssignment -User itpro -Role "Mailbox Import Export" После назначения ролей нужно перезапустить консоль Exchange Management Shell. Поиск писем в ящиках пользователей можно выполнить и через Exchange Control Panel / Exchange Admin Center, однако этот способ поиска довольно медленный и не позволяет удалять письма. Гораздо проще выполнить поиск с помощью PowerShell. Для поиска сообщений в ящиках пользователей можно использовать командлет Search-Mailbox, который позволяет по определенным критериям найти письма во всех или конкретных ящиках, скопировать найденные элементы в другой ящик или удалить их. Search-Mailbox -Identity vasia -SearchQuery 'Subject:"Годовой отчет"' Для поиска по всем ящикам в организации, воспользуйтесь командой: Get-Mailbox -ResultSize unlimited | Search-Mailbox -SearchQuery 'Subject:"Годовой отчет"' Чтобы скопировать результаты поиска в определенный ящик и папку, используйте параметры TargetMailbox и TargetFolder. Таким образом после окончания поиска вы сможете с помощью Outlook или OWA вручную просмотреть найденные письма. Допустим, нам нужно выполнить поиск писем по списку пользователей (содержится в текстовом файле users.txt) и скопировать найденные письма в папку определённого ящика, выполните: get-content users.txt | Get-Mailbox -ResultSize unlimited | Search-Mailbox -SearchQuery 'Subject:"Годовой отчет"' -TargetMailbox sec_mbx -TargetFolder "ExSearchFolder” Параметр –LogOnly означает, что нужно выполнить только оценку результатов поиска, не копируя результаты поиска в целевой ящик и не удаляя элементы. При использовании этого аргумента на указанный целевой ящик будет отправлен отчет с результатами поиска. Отчет представляет собой заархивированный csv-файл, в котором перечислен список ящиков, соответствующих критериям поиска. Вы можете оценить результаты поиска с помощью параметра –EstimateResultOnly, обратите внимание, что при использовании данного аргумента не нужно указывать целевой ящик и папку Чтобы удалить найденные письма нужно использовать параметр –DeleteContent, чтобы убрать запросы на подтверждение удаления информации, добавьте параметр –Force. Удалим все письма от пользователя vasia во всех ящиках на определенном сервере Exchnage: Get-Mailbox –Server msk-mdb1 –ResultSize unlimited | Search-Mailbox -SearchQuery 'from:"vasia@winitpro.ru"' –DeleteContent –Force Перед удалением писем из ящиков с помощью ключа -DeleteContent настоятельно рекомендуем ознакомиться с найденными по указанным критериям поиск письмам с помощью аргументов -EstimateResultOnly или –LogOnly. Чтобы выполнить поиск только по удаленным элементам, добавьте параметр –SearchDumpsterOnly (чтобы исключить поиск по удаленным элементам, добавьте параметр -SearchDumpster:$false) . Если нужно исключить архив ящика, используйте параметр –DoNotIncludeArchive. Примеры запросов SearchQuery на поиск писем в ящиках Exchange Рассмотрим примеры запросов выборки почтовых элементов с помощью параметра SearchQuery. Параметр SearchQuery обрабатывает запросы на языке KQL (Keyword Query Language) — https://docs.microsoft.com/ru-ru/sharepoint/dev/general-development/keyword-query-language-kql-syntax-reference. Удалим все письма с ключевым слово «Секрет» в теме от всех пользователей не из вашего домена: Search-Mailbox -Identity vasia -SearchQuery 'Subject:"Секрет" and from<>”winitpro.ru”' -DeleteContent Найти и удалить все письма с вложениями размером более 20Мб: Search-Mailbox -Identity vasia -SearchQuery 'hasattachment:true AND Size >20971520' –DeleteContent Совет. Размер писем указывается в байтах, причем учитывается размер всего письма, а не только вложения. Можно указывать размер в мегабайтах, в этом случае используется такой синтаксис: -SearchQuery {Size -gt 20MB}. Можно одновременно искать по тексту в заголовке и в теме письма, например, найдем и удалим все письма, у которых в теме письма содержится фраза «Новый Год» или в тексте письма есть фраза «покупка коньяка». Search-Mailbox vasia -SearchQuery {Subject:"RE:Новый Год" OR body:"покупка коньяка"} -DeleteContent -Force Можно искать в ящиках определенные элементы, с помощью аргумента Kind, например,: Собрания: -SearchQuery "Kind:meetings" Или другие элементы: Email — письма Поиск писем по определенному отправителю и получателю -SearchQuery 'from:"admin@winitpro.ru" AND to:"support@winitpro.ru"' Можно искать письма с определенным файлом во вложении: -SearchQuery 'attachment:"secret.pdf"' Или по типу файла: -SearchQuery 'attachment -like:"*.docx"' Возможен поиск по дате отправки / получения писем, но тут есть несколько нюансов. При использовании дат в качестве критерия поиска нужно учитывать региональные настройки сервера Exchange. Например, дата 20 июля 2018 года может быть указана: 20/07/2018 И если вы при выполнении команды Search-Mailbox вы получите ошибку “The KQL parser threw an exception…”, значит вы используете неверный формат времени. Для поиска писем, отправленных в конкретный день, используйте запрос: -SearchQuery sent:20/07/2018 Если нужно указать диапазон дат (поиск писем, полученных в указанный промежуток времени): -SearchQuery {Received:20/06/2018..20/07/2018} Еще один пример. Ищем письма, полученных до 7 июля: -SearchQuery {Received:> $('07/07/2018')} Совет. В локализованной (русской) версии Exchange нужно использовать русские ключи в аргументах KQL. Например, для ищем письма, полученные и отправленные в указанный период: -SearchQuery {отправлено:"01/07/2018..20/07/2018" AND получено:"01/07/2018..20/07/2018} Соответственно, нужно использовать такие конструкции в SearchQuery: кому:admin@winitpro.ru ЗЫ. Именно за это я не люблю использовать русские версии продуктов! Ограничения Search-Mailbox У команды Search-Mailbox есть существенное ограничение она может вернут только 10000 элементов, после чего она вернет ошибку Sending data to a remote command failed with the following error message: The total data received from the remote client exceeded allowed maximum. Allowed maximum is 524288000. Get-Mailbox -Database mskdb | Search-Mailbox –SearchQuery 'from:spam@spammer.ru' -DeleteContent –Force Другая проблема Search-Mailbox – низкая производительность. Поиск по большой организации может выполняться несколько суток. Быстрый поиск и удаление писем в Exchange 2016 с помощью New-ComplianceSearch В Exchange 2016 появился новый механизм для быстрого поиска и удаления писем в ящиках пользователей. С помощью следующих команд можно существенно сузить область поиска: New-ComplianceSearch -Name FastSearch1 -ExchangeLocation all -ContentMatchQuery 'from:"spammer@gmail.com"' Данные команды отрабатывают на нескольких тысяч ящиков за несколько минут. Получаем список ящиков, которые попадают под критерии поиска: $search = Get-ComplianceSearch –Identity FastSearch1 Теперь можно запустить удалением писем с помощью Search-Mailbox только в найденных ящиках: $mbxs | Get-Mailbox| Search-Mailbox -SearchQuery 'from:"spammer@gmail.com"' -DeleteContent –Force Суммарное время поиска и удаления писем уменьшается в несколько раз, особенно в больших организациях. Теперь можно удалить результаты поиска: Remove-ComplianceSearch –Identity FastSearch1 | |
Просмотров: 604 | |
Всего комментариев: 0 | |