В Exchange Server вы можете использовать PowerShell командлеты Search-Mailbox или New-ComplianceSearch (доступен в новых версиях Exchange Server и в Exchange Online/Microsoft 365) для поиска и удаления писем из ящиков пользователей. Например, пользователь случайно разослал приватные данные коллегам в организации и не успел отозвать сообщение в Outlook. Департамент защиты информации требует, чтобы вы, как администратор Exchange, удалили случайно отправленное приватное письмо из всех ящиков пользователей в вашей организации/тенанте Exchange
Предоставить права для поиска по ящикам Exchange
Подключитесь к своему on-prem Exchange серверу с помощью PowerShell.
Учетной записи администратора, который выполняет поиск и удаление элементов нужно назначить следующие роли:
- Mailbox Import Export
- Mailbox Search
Вы можете назначить роли через EAC или с помощью следующих команд PowerShell:
New-ManagementRoleAssignment -User itpro -Role "Mailbox Import Export"
New-ManagementRoleAssignment -User itpro -Role "Mailbox Search”
В Exchange Online нужно назначить следующие роли:
Add-RoleGroupMember "Discovery Management" -member [email protected]
New-RoleGroup "Mailbox Import-Export Management" -Roles "Mailbox Import Export"
Add-RoleGroupMember "Mailbox Import-Export Management" -Member [email protected]
Добавьте свою учетную запись в eDiscovery Admins в Microsoft 365 Compliance Center
После назначения ролей нужно перезапустить сеанс PowerShell.
Search-Mailbox: поиск и удаление писем в ящиках Exchange
Для поиска писем в ящиках пользователей можете использовать веб-интерфейс Exchange Admin Center (EAC) или PowerShell командлет Search-Mailbox. Эта команда позволяет найти письма в ящиках пользователей по определенных критериями, скопировать найденные элементы в другой ящик или удалить их
Для поиска в ящике пользователя писем с определенной темой выполните команду:
Search-Mailbox -Identity vasia -SearchQuery 'Subject:"Годовой отчет"'
Для поиска по всем ящикам в организации, воспользуйтесь командой:
Get-Mailbox -ResultSize unlimited | Search-Mailbox -SearchQuery 'Subject:"Годовой отчет"'
WARNING: On July 1, 2020, the Search-Mailbox cmdlet is being retired and Microsoft Support will no longer provide assistance. See https://go.microsoft.com/fwlink/?linkid=2113221 to learn more. WARNING: The Search-Mailbox cmdlet returns up to 10000 results per mailbox if a search query is specified. To return more than 10000 results, use the New-MailboxSearch cmdlet or the In-Place eDiscovery & Hold console in the Exchange Administration Center.
Microsoft рекомендует использовать для поиска более быстрые командлеты
New-ComplianceSearch
и
New-ComplianceSearchAction
(рассмотрены ниже).
Чтобы скопировать результаты поиска в определенный ящик и папку, используйте параметры TargetMailbox и TargetFolder. Это позволит вам после окончания поиска вручную просмотреть найденные письма в вашем Outlook. Допустим, нам нужно выполнить поиск писем по списку пользователей (содержится в текстовом файле users.txt) и скопировать найденные письма в папку определённого ящика, выполните:
get-content users.txt | Get-Mailbox -ResultSize unlimited | Search-Mailbox -SearchQuery 'Subject:"Годовой отчет"' -TargetMailbox sec_mbx -TargetFolder "ExSearchFolder”
Параметр –LogOnly -LogLevel Full означает, что нужно выполнить только оценку результатов поиска, не копируя результаты поиска в целевой ящик и не удаляя элементы. При использовании этого аргумента на указанный целевой ящик будет отправлен отчет с результатами поиска. Отчет представляет собой заархивированный csv-файл, в котором перечислен список ящиков, соответствующих критериям поиска.
(Read: True/False
).Вы можете оценить результаты поиска (общее количество и размер писем) с помощью параметра –EstimateResultOnly. При использовании этого параметра не нужно указывать целевой ящик и папку.
Get-Mailbox | Search-Mailbox -SearchQuery 'Subject:"report"' -EstimateResultOnly|select Identity,ResultItemsCount,ResultItemsSize| Where-Object ResultItemsCount -gt 0
Чтобы удалить найденные письма нужно использовать параметр –DeleteContent. Чтобы убрать запросы на подтверждение удаления информации, добавьте параметр –Force.
Удалим все письма от пользователя vasia во всех ящиках на определенном почтовом сервере Exchange:
Get-Mailbox –Server msk-mdb1 –ResultSize unlimited | Search-Mailbox -SearchQuery 'from:"[email protected]"' –DeleteContent –Force
-DeleteContent
настоятельно рекомендуем ознакомиться с найденными по указанным критериям поиск письмам с помощью аргументов
-EstimateResultOnly
или
–LogOnly
.Чтобы выполнить поиск только по удаленным элементам, добавьте параметр –SearchDumpsterOnly (чтобы исключить поиск по удаленным элементам, добавьте параметр
-SearchDumpster:$false
) . Если нужно исключить архив ящика, используйте параметр –DoNotIncludeArchive.
Командлет 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.
Поэтому, чтобы удалить большее количество элементов нужно запустить командлет Search-Mailbox несколько раз, либо разбивать ящик на группы по почтовым базам или серверам.
Get-Mailbox -Database mskdb | Search-Mailbox –SearchQuery 'from:[email protected]' -DeleteContent –Force
Другая проблема Search-Mailbox – низкая производительность. Поиск по большой организации может выполняться несколько суток. В современных версиях Exchange и Microsoft 365 для поиска писем в ящиках лучше использовать командлет New-ComplianceSearch (рассмотрен ниже).
Примеры запросов SearchQuery для поиска писем в ящиках Exchange
Рассмотрим примеры запросов на поиск почтовых элементов с помощью параметра SearchQuery. Параметр SearchQuery обрабатывает запросы на языке KQL (Keyword Query Language) — https://docs.microsoft.com/en-us/sharepoint/dev/general-development/keyword-query-language-kql-syntax-reference.
Найти и удалить все письма с ключевым слово “Секрет” в теме от всех пользователей не из вашего домена:
Search-Mailbox -Identity vasia -SearchQuery 'Subject:"Секрет" and from<>”winitpro.ru”' -DeleteContent
С помощью логических операторов OR и AND вы можете комбинировать более сложные условия поиска писем.
Найти и удалить все письма с вложениями размером более 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"
Контакты:
-SearchQuery "Kind:contacts"
Или другие элементы:
- Email — письма
- Meetings — собрания
- Tasks — задачи
- Notes — заметке
- Docs – документы
- Journals — журналы
- Contacts — контакты
- IM – сообщения мессенджеров
Поиск писем по определенному отправителю и получателю
-SearchQuery 'from:"[email protected]" AND to:"[email protected]"'
Письма с вложениями:
-SearchQuery 'hasattachment:true'
Прочитанные письма:
-SearchQuery 'isread:false'
Поиск писем по размеру:
-SearchQuery 'size>200000'
-SearchQuery 'attachment:"secret.pdf"'
Или по типу файла:
-SearchQuery 'attachment -like:"*.docx"'
Возможен поиск по дате отправки/получения писем, но тут есть несколько нюансов. При использовании дат в качестве критерия поиска нужно учитывать региональные настройки сервера Exchange. Например, дата 20 февраля 2022 года может быть указана:
- 20/02/2022
- 02/20/2022
- 20-Feb-2022
- 20/February/2022
Если при выполнении команды Search-Mailbox вы получите ошибку “
The KQL parser threw an exception…
”, значит вы используете неверный формат времени.
Для поиска писем, отправленных в конкретный день, используйте запрос:
-SearchQuery sent:22/02/2022
Если нужно указать диапазон дат (поиск писем, полученных в указанный промежуток времени):
-SearchQuery {Received:20/06/2020..22/02/2022}
Еще один пример. Ищем письма, полученные после 7 июля:
-SearchQuery {Received:> $('07/07/2021')}
-SearchQuery {отправлено:"01/07/2018..20/07/2018" AND получено:"01/07/2018..20/07/2018}
Соответственно, нужно использовать такие конструкции в SearchQuery:
-
кому:[email protected]
-
откого:"[email protected]"
-
тема:"Секретный план"
ЗЫ. Именно за это я не люблю использовать русские версии серверных продуктов!
New-ComplianceSearch: быстрый поиск и удаление писем в Exchange
В Exchange 2016/2019 и Exchange Online (Microsoft 365) появился новый механизм для быстрого поиска и удаления писем в ящиках пользователей с помощью командлетов New-ComplianceSearch и New-ComplianceSearchAction.
Подключитесь к M365 Security & Compliance Center:
Connect-IPPSSession
Попробуем найти в ящиках письма с определенной темой от указанного email отправителя за период:
$Sender = "[email protected]"
$StartTime = "02/19/2022"
$EndTime = "02/21/2021"
$Subject = "report2022"
Чтобы создать задание поиска писем по указанным критериям, выполните:
New-ComplianceSearch -Name "ContentSearch_for_Report2022" -ExchangeLocation all -ContentMatchQuery "sent>=$($StartTime) AND sent<=$($EndTime) AND sender:$($Sender) AND subject:$($Subject)"
Вы можете задавать критерии поиска в атрибуте -ContentMatchQuery по аналогии с параметрами -SearchQuery командлета Search-Mailbox.
New-ComplianceSearchAction: The term 'New-ComplianceSearchAction' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling of the name, or if a path was included, verify that the path is correct and try again.
Проверьте, что вы назначили все роли Exchange как описано выше.
Закройте текущую сессию PowerShell и переподключитесь:
Get-PSSession | Remove-PSSession
.
Чтобы запустить это задание:
Start-ComplianceSearch -Identity "ContentSearch_for_Report2022"
Нужно дождаться его выполнения. Текущий статус можно получить так:
Get-ComplianceSearch -Identity "ContentSearch_for_Report2022"| FL name,items,size,jobprogress,status
Чтобы вывести результаты поиска в консоль в режиме Preview:
New-ComplianceSearchAction -SearchName "ContentSearch_for_Report2022" -Preview
(Get-ComplianceSearchAction "ContentSearch_for_Report2022"| Select-Object -ExpandProperty Results).Split(";")
Если вы хотите удалить все найденные письма из ящиков пользователей, используйте параметр –Purge:
New-ComplianceSearchAction -SearchName ContentSearch_for_Report2022 -Purge -PurgeType SoftDelete
-PurgeType SoftDelete
. Укажите
-PurgeType HardDelete
, чтобы полностью удалить письма из почтовых ящиков.
По поводу параметров -SearchDumpster и -SearchDumpsterOnly, думаю, стоит уточнить важный момент. Их использование подразумевает поиск не в папке Deleted, а в папке «Recoverable Items». Т.е. письма, которые уже отображаются в ящике.
Также я бы еще рассказал бы про ключ -IncludeUnsearchableItems, который включает в результаты поиска непроиндексированные объекты. Это очень даже важно, потому что те же письма с вложением *.pdf очень даже могут не проиндексироваться. И тогда в результате поиска мы ничего не увидим без этого ключа.
Спасибо! Дополнение по делу.
Не совсем понимаю механизм IncludeUnsearchableItems. Как можно искать по непроиндексированным элементам.
А собственно никак. При использовании данного ключа в результатах поиска добавится папка «Unsearchable» в которую попадут все непроиндексированные элементы не зависимо от критериев поиска. Поэтому нужно быть крайне осторожным при удалении.
Проверил у себя на Exchange 2016 SP8, получил
«New-ComplianceSearch : Имя «New-ComplianceSearch» не распознано как имя командлета…»
Вашей учетной записи долны быть назначены роли «Compliance Management» и «Discovery Management»
Здравствуйте! А где назначить эти роли? И как? Извините, я не могу ничего найти, админ уволился, доступы к серверам есть, а где чего делать, непонятно.
Какя версия Exchange?
Состав роли можно получить так:
Get-RoleGroupMember "Discovery Management"
Можно назначить роль через командную строку PowerShell Exchange Management Shell:
Add-RoleGroupMember "Discovery Management" -Member admin1
Отправил пьсмо, сделал все по инструкции(новый, быстрый способ), письмо не удалилось…
Может оно еще не проиндескировано?
Куда вставлять ключ IncludeUnsearchableItems ?
Добрый день!
Спасибо за статью.
Подскажите плиз, так уж сложилось, что Exchange 2010 русский. И -searchquery keywords приходится вводить русские. Вот не могу найти аналог Body: на русском, т.е. нужно найти определенный текст в теле письма и во вложениях.
Спасибо!
К сожалению у меня английская версия Exchange, проверить сам не могу.
Попробуйте «тело»: -SearchQuery ‘Тело:»Совещание»‘
Да, и есть ли какой способ удалять найденные через ECP письма в ящиках пользователей? иногда это удобно, можно быстро просмотреть контент.
-SearchQuery {Received:20/06/2018..20/07/2018}
как быть , если нужно указать промежуток времени+отправитель + поиск по всем почтовым ящикам?
хочу что-то типа такого:
Get-Mailbox -ResultSize unlimited | Search-Mailbox -SearchQuery {Received:»20/06/2018 1:10 PM..20/07/2018 1:30 PM» AND ‘from:»[email protected]»‘} TargetMailbox adminpost -TargetFolder «SearchAndDeleteLog» -LogOnly -LogLevel
Тут все зависит от формата даты в вашей системе. Попробуйте такой формат поиска:
-SearchQuery {Received:"20/06/2018 1:10..20/07/2018 13:30" AND from:[email protected]}
Есть вообще где-нибудь библиотека русских ключе в аргументах KQL?
К сожалению, я тоже не встречал таблицу соотвествия русских и английских аргументов KQL. Вот таблица списка индексируемых свойств, которые можно использовать в поиске Search-Mailbox: https://docs.microsoft.com/en-us/exchange/message-properties-indexed-by-exchange-search-exchange-2013-help
Можно по смыслу подбирать, но очень трудоемко.
Это ксати еще один аргумент в пользу того, что нужно использовать английские версии серверного ПО.
Здравствуйте! Стоит задача по выявлению сотрудников, отсылающих письма на сторонние ящики. Как это можно сделать?
Думаю можно использовать примерно такой запрос для получения всех писем, отправленных не локальным получателям в домене (на внешние адреса)
Get-Mailbox -Identity username | New-MailboxSearch -Name FindExternalEmails -TargetMailbox adminmail| Where {$_.Recipients -notlike "*@winitpro.ru"}
либо для начала проверить транспортные журналы на отправление наружу:
Get-TransportServer -Identity exchangeHUBname | Get-MessageTrackingLog -resultsize unlimited |where-object {$_.Recipients -notlike "@winitpro.ru" AND $_.EventId -eq "Send"} | ft
Да просто запретите этим пользователям такую отправку
При использовании ключа –EstimateResultOnly отображаются результаты для всех почтовых ящиков. Возможно ли отфильтровать вывод –EstimateResultOnly таким образом, чтобы отображались результаты поиска только для тех почтовых ящиков, для которых значение ResultItemsCount отлично от нуля?
Попробуйте так:
Search-Mailbox ...... –EstimateResultOnly | Where-Object ResultItemsCount -gt 0
При использовании New-ComplianceSearch получаю ошибку WriteError: (:) [], AggregateException. Информации вообще никакой нет, может. Полный запрос New-ComplianceSearch -Name «Remove» -ExchangeLocation all -ContentMatchQuery ‘тема:»Test Test»‘.
Доброго дня.
Большинскво команд заканчивается так:
Get-Mailbox -Database mskdb | Search-Mailbox –SearchQuery ‘Subject:»Немедленно смените пароль!»‘ -TargetMailbox admin -TargetFolder «ExSearchFolder”
Ключевое слово property не поддерживается.
+ CategoryInfo : InvalidArgument: (:) [], ParserException
+ FullyQualifiedErrorId : EBF20523
–SearchQuery Subject надо на русском получается?
В русской версии Exchange все параметры поиска SearchQuery нужно писать по-русски. Т.е. «Тема» вместо «Subject» и т.д.
Get-Mailbox -ResultSize unlimited | Search-mailbox -SearchQuery {‘subject:»RE: у кого есть» and Received:»26/12/2019″‘} -DeleteContent -Force
На Exchange 2013 данная команда отработала все письма содержавшие «RE:» и дату, а не «RE: у кого есть» и дату . Встречал ли кто такое? Что я сделал не так. ((((( Грухнулись письма содержащие RE: на 26 число.
А у вас в принципе запрос
-SearchQuery {'subject:"RE: у кого есть"')
находит что-то?Добрый день.
Подскажите пожалуйста, как запустить команду на поиск по списку серверов?
Укажите список mailbox серверов в первой переменной. Затем используйте цикл foreach для перебора серверов:
$mbx="mbx1","mbx2"
Foreach ($mb in $mbx)
{
Get-Mailbox -Server $mb -ResultSize | Search-Mailbox -SearchQuery ....
}
Каким образом следует действовать, если нужно найти все письма от определённых отправителей/получателей в почтовых ящиках пользователей и произвести выгрузку их содержимого в каком либо виде?
Search-Mailbox все это умеет. Сфомируйте критерии поиска писем и выполните Search-Mailbox с -TargetMailbox sec_mbx -TargetFolder «ExSearchFolder”. Все письма, которые соотвествуют критерию будут скопированы в указанную папку указанного ящика.
Exchange 2016, при использовании Search в указанную папку приходит архив с результатом поиска, но сами письма в папку не копируются.
Руслан, также столкнулся с этим. Это лечится или уже ограничения Системы?
Копирование не происходит, это ограничения или можно как-то обойти?
Отчет приходит на почту, но само сообщение которое я хотел скопировать, нет.
Как решить?
создайте запрос
Search-Mailbox -Identity «ЯЩИК ПОЛЬЗОВАТЕЛЯ» -TargetMailbox «МОЙ ЯЩИК» -TargetFolder «ПАПКА В ЯЩИКЕ» -SearchQuery ‘….’
в конце НЕ пишите -LogOnly -LogLevel Full
письма будут скопированы в «МОЙ ЯЩИК» в папку «ПАПКА В ЯЩИКЕ»
«New-ComplianceSearch -Name FastSearch1 -ExchangeLocation all -ContentMatchQuery ‘from:[email protected]’
Не удается выполнить эту задачу. Причина: Не удалось получить существующего пользователя. Повторите попытку позже.»
Почему может быть такая ошибка
Коллеги на форуме подсказывают что у учетки под которой происходит поиск обязательно должен быть почтовый ящик, но разве правильно когда у привиллигерованой учетки есть почтовый ящик?
Ну, если создание ящика решает проблему с кмндлетом New-ComplianceSearch, то создавайте его и не мучайтесь. Для чего нужен именно ящик знает только microsoft. У меня по крайней мере у учетной записи админа exchange ящик есть, были еще несколько командлетов, которые без ящика не работали.
с такой же проблемой столкнулся, включение ящика на учетке не помогло
удалось решить? с такой же проблемой столкнулся
А подскажите как из поиска по ключевому слову по всей организации исключить некоторых пользователей.
вот пример по всем ящикам
Get-Mailbox -ResultSize unlimited | Search-Mailbox -SearchQuery ‘пример’ -EstimateResultOnly
А как из этого исключить нескольких пользователей?
Если нужно исключить пару пользователей, можно так:
Get-Mailbox -ResultSize unlimited| Where-Object {$_.PrimarySmtpAddress -ne '[email protected]' -AND $_.PrimarySmtpAddress -ne '[email protected]' }| Search-Mailbox -SearchQuery ‘пример’ -EstimateResultOnly
Но это очень медленно будет работать, с фильтром наверно побыстрее:
Get-Mailbox -Filter {(PrimarySmtpAddress -ne '[email protected]') -or (PrimarySmtpAddress -ne '[email protected]'}
Спасибо!! , первый способ работает — второй нет)))
А можно ли использовать тут не параметр PrimarySmtpAddress c e-mail, а название почтового ящика, как в параметре Identyty?
Да, для поиска можно использовать любой атрибут ящика Exchange
Search-Mailbox -Identity username -SearchQuery ‘Subject:»some words» doesn’t work!
>>The target mailbox or .pst file path is required.
For what? Which .pst? I just want some mails to be displayed in EMS windows, I don’t need target mailbox…
Search-Mailbox can’t return found items directly to EMS. You can only export results to some folder on a target mailbox (you can use your own mailbox) or to a pst file.
Здравствуйте.
Как посмотреть историю выполненных команд на exchange?
Вы про аудит действий администраторов? Нужно настраивать Set-AdminAuditLogConfig. Если нужно аудировать все команды:
Set-AdminAuditLogConfig -AdminAuditLogCmdlets *
Set-AdminAuditLogConfig -AdminAuditLogEnabled $true
Get-history
Добрый День !
Такая вот ситуевина. Отправляю тестовое письмо на ящик, затем запускаю поиск в по ящику командой
Search-Mailbox -Identity user1 -SearchQuery {from:[email protected] And received:10-02-2021} -EstimateResultOnly
Но в ответ получаю нули. А если запустить вот такую без даты
Search-Mailbox -Identity user1 -SearchQuery from:[email protected] -EstimateResultOnly
То находит, формат даты пробовал разный все равно с указанием дат по нулям.
Логический оператор большими буковками AND OR NOT. Пардон за спешку, сам тупанул )
Добрый день. У меня работает так, поиск по дате и от кого. но у меня есть список из 70 где-то адресов и по всем этим ящикам каждый месяц запускать ручками очень муторно, можете подсказать как сделать удаление по списку из файла?
Search-Mailbox -Identity mail1 -SearchQuery {Получено:<01/01/2022 and откого[email protected]} -DeleteContent
Как то так можно:
get-content users.txt | Get-Mailbox -ResultSize unlimited | Search-Mailbox -SearchQuery ...
Добрый день.
New-ComplianceSearchAction -SearchName ContentSearch_for_Report2022 -Purge -PurgeType HardDelete — не хочет удалять полностью , только SoftDelete ?
Ограничения параметра -purge:
1) A maximum of 10 items per mailbox can be removed at one time. Because the capability to search for and remove messages is intended to be an incident-response tool, this limit helps ensure that messages are quickly removed from mailboxes. This action isn’t intended to clean up user mailboxes.
2) You can remove items from a maximum of 50,000 mailboxes using a single content search
3) Unindexed items aren’t removed from mailboxes when you use this switch.
_https://docs.microsoft.com/ru-ru/powershell/module/exchange/new-compliancesearchaction?view=exchange-ps
Попробуйте сузить критерии поиска до одного письма и удалить его через -PurgeType HardDelete. Так сработает?
Столкнулся с проблемой что удалить письма нельзя если пользователь перемещает письма в другую папку, в таком случае не находит письма совсем. Пробовал
Search-Mailbox -Identity webprice -SearchQuery {Получено:<14/08/2022 and Кому:[email protected]} -DeleteContent
Есть у кого-нибудь идеи как это победить?
Добрый день. Запускаю Get-Mailbox -Database Adm-Db | Get-Mailbox -ResultSize Unlimited | Search-Mailbox -SearchQuery {Received:13/09/2022..20/09/2022 AND From:»[email protected]»} -TargetMailbox [email protected] -LogLevel full -TargetFolder «Search” Все отрабатывает отлично, отчет падает на ящик. Вот только никак не соображу, как в отчет добавить еще и поле с почтовым адресом получателя.
New-ComplianceSearchAction -SearchName «Remove Dangerous Message» -Purge -PurgeType HardDelete
Не удается обработать преобразование аргументов для параметра «PurgeType». Не удается преобразовать значение «HardDelete» в тип «Microsoft.Exchange.Compliance.TaskDistributionCommon.ObjectModel.ComplianceDestroy
Type». Ошибка: «Не удается сопоставить пустое имя идентификатора HardDelete с допустимым именем перечислителя. Укажите одно из следующих имен перечислителя и попробуйте еще раз:
Unknown, SoftDelete»
На сайте MS указано: HardDelete (cloud only) — т.е. для локального Exchange это неприменимо?
Все верно, опция HardDelete только для Exchange Online
Добрый день. Exchange 2013 cu23 новые методы работаю как то криво, потому чистил через Search-Mailbox в цикле.
Попробовал очистить (пока) один ящик. Вот скрипт:
$query = ‘Received:01/01/2008..01/01/2020 AND Sent:01/01/2008..01/01/2020’
While((Get-Mailbox i.ivanov | Search-Mailbox -SearchQuery $query -EstimateResultOnly).ResultItemsCount -ne 0 ){ Get-Mailbox i.ivanov | Search-Mailbox -SearchQuery $query -DeleteContent -Force }
Все отработало нормально, но одному сотруднику (секретарю) посыпались сообщения (в итоге аж 37 штук).
Что-то вроде:
_______________________________________________________
Иван Иванов
Пн 24.10.2022 16:48
Кому:
Секретарь;
Сообщение
Кому: Иван Иванов
Тема: Task Request: День рождения Еремина Алексея
Отправлено: 18 октября 2016 г. 9:57:03 (UTC + 03:00) Москва, Санкт-Петербург
было удалено без чтения в 24 октября 2022 г. 16:41:03 (UTC + 03:00) Москва, Санкт-Петербург.
________________________________________________________
и др. сообщения разной степени важности.
Что это может быть, у кого было, чем вызвано и может ли оно отправиться кому нить вне нашей локальной сети ?
Warning.
у меня тестовый exchange, AD и шлюз в другом VLAN (но с айпишниками как в продуктивной среде) и с выходом в интернет.
И коллега прислал отбивку, что наш почтарь отправлял сообщения с другого ip адреса (ip адрес используемый для тестовой среды. У него нет ptr записей и т.д.).
А это значит, что после очистки ящиков некоторые письма посыпались наружу, были сбриты спамфильтром получателя и уже на продуктивную среду пришло об этом сообщение.
В логи я пока с трудом, но походу придется))
Есть у кого предположения и советы ?
все бы было хорошо, но я ни как не мог подобрать формат даты
в итоге моя строка запроса стала выглядеть так:
Search-Mailbox -Identity "ЯЩИК ПОЛЬЗОВАТЕЛЯ" -TargetMailbox "МОЙ ЯЩИК" -TargetFolder "ПАПКА В ЯЩИКЕ" -SearchQuery 'Received>= "2023-02-21T19:00:00Z" AND Received<= "2023-02-22T01:59:59Z" body:"ТЕКСТ В ПИСЬМЕ" subject:"ТЕМА ПИСЬМА" -"RE" -"FW"' -LogOnly -LogLevel Full
-«RE» -«FW»‘ это исключения из темы письма (актуально если письма пересылались (отвечали) и вы их хотите оставить)
Поле дата, это оказалось самым не простым
Проверяем короткий формат даты:
(Get-Date).ToShortDateString() -> dd.MM.yyуу или 20.03.2023
Не смотря переборы всех возможных и невозможных вариантов у меня сработал один единственный:
2023-02-21T19:00:00Z
В поле селекта SearchQuery не обязательно писать AND
ЗЫ админ добавь в тему
Exchange 2013
Добрый день!
Подскажите пожалуйста применил такую команду:
Get-Mailbox | Search-Mailbox -SearchQuery ‘Subject:»ТЕМА ПИСЬМА»‘ -EstimateResultOnly| sort-object ResultItemsCount -descending |select Identity,ResultItemsCount,ResultItemsSize| Where-Object ResultItemsCount -gt 0
Но теперь мне нужно суммировать все результаты. Что бы понимать сколько занимают места эти письма на сервере.
Добрый день!
Как можно из тела письма thunderbird вытащить email ? оно в разных местах находится всё время
$str=type .\inbox|?{$_ -match «^to»}|select -first 1;
$name=$str.split().split(«@»)[1];
$name
Привет, Подскажите а как удалить письмо с определенной темой и отправителем на Exchange 2007
Параметр Purge позволяет удалить только 10 писем из ящика за раз
Скажите, а есть возможность прислать на ящик не результаты поиска, а сами письма пользователей? Либо эти письма экспортировать в pst файл на сервере?
По умолчанию Search-Mailbox как раз таки копирует найденные письма в указанный ящик, если не использовать опцию –LogOnly -LogLevel Full
Привет!
Подскажите возможно-ли восстановить удалённые таким образом письма?
Get-Mailbox | Search-Mailbox -SearchQuery ‘Тема:»Bitrix» OR body:»Bitrix»‘ -DeleteContent -Force | Where-Object ResultItemsCount -gt 0
махнул немного лишнего
Эти письма удалены без возможности восстановления. Нужно восстаналивать из резервной копии.
Get-Mailbox -ResultSize unlimited | Search-Mailbox -SearchQuery вложение:"котики.jpg"
или Get-Mailbox -ResultSize unlimited | Search-Mailbox -SearchQuery Subject:»Contract»
на 2010
Указание пути к целевому почтовому ящику или PST-файлу является обязательным.
+ CategoryInfo : InvalidArgument: (:) [], ArgumentException
На 2016
Search-Mailbox : The term ‘Search-Mailbox’ is not recognized as the name of a cmdlet,
Get-Mailbox -Database MDB02 | New-MailboxSearch –SearchQuery Subject:»Contract »
A parameter cannot be found that matches parameter name ‘SearchQuery’.
+ CategoryInfo : InvalidArgument: (:) [New-MailboxSearch], ParameterBindingException
+ FullyQualifiedErrorId : NamedParameterNotFound,New-MailboxSearch
Выражение SearchQuery взять в кавычки:
Get-Mailbox -Database MDB02 | New-MailboxSearch –SearchQuery 'Subject:"Contract"'
Н пойму что за кавычки такие . русские пробовал латиницу.
A parameter cannot be found that matches parameter name ‘SearchQuery’.
«Subject:»У вас появились новые курсы»»
‘Subject:»У вас появились новые курсы»‘
‘Subject:»»У вас появились новые курсы»‘
« и ‘
Какие правильно.
Чат жпти говорит надо добавить -SearchDumpster но пока не выходит.
Блин оказалось прав не было на этого админа.
New-MailboxSearch -Name "SearchName" -SourceMailboxes $mailboxes -SearchDumpster -SearchQuery 'from:"[email protected]"' -DeleteContent -Force
на моём сервере 2016 работает.подскажите как удалить дубликаты писем из почтового ящика,
выгружать в pst не вариант ящики большие
Добрый день!
В Exchange Online Search-Mailbox не работает, все права выдали, а через ComplianceSearchAction можно только 10 писем.
Подскажите, сейчас есть возможность удаления более чем 10 писем за раз?
Если это ещё кому то интересно, то во-первых в предыдущем комментарии опечатка, можно удалить 100 писем за раз, а во-вторых ответ из официальной поддержки таков:
New-ComplianceSearchAction -SearchName -Purge -Purgetype Harddelete
If you want to delete 1000 emails run above command at least 10 times.
Получается нас лишили хорошего рабочего инструмента)
Хочу очистить ящики от писем, старше 2 лет.
Search-Mailbox user1 -SearchQuery Received:01/01/2010..01/01/2022 -deletecontent
Но не удаляются письма, которые находятся в подпапках. То есть, из Входящие — удаляются, а из Входящие\Продажи — нет.
Подскажите, как решить вопрос?
Exchange 2013.
Search-Mailbox должен видеть все письма, которые хранятся как в основной так и вложеннвых папках основного ящика.
Предлагаю сначала проверить что Search-Mailbox в режиме поиска находит письма попадающие под запрос в подпапке.