Время от времени администратор Exchange сталкивается с ситуацией, когда сообщения соответствующие определенным критериям должны быть удалены из большого числа почтовых ящиков или транспортных очередей сервера Exchange. Такая необходимость может возникнуть из-за какой-либо массовой рассылки, когда сообщение отправлено случайно в большую группу рассылки или большому числу отдельных получателей или когда нужно предпринять усилия по очистке от последствий распространения вируса массовой почтовой рассылки (хотя они встречаются все реже и являются предметом заботы антивирусных сканеров серверов Exchange).
Соответствующие шаги описаны в различных местах документации Exchange, но может быть достаточно трудно, чтобы обратиться к нескольким источникам, если вы имеете смешанную среду содержащую несколько версий Exchange сервера. Мы хотели бы собрать в одном месте в некоторой степени обобщенные инструкции о том, как выполнить эти задачи во всех ныне поддерживаемых версиях Exchange Server - Exchange 2010, Exchange 2007.
Удаление сообщений из почтовых ящиков
Удаление сообщений из командной строки в Exchange 2010 RTM и Exchange 2007
В Exchange 2010 RTM и в Exchange 2007 вы можете использовать командлет
Export-Mailbox для того, чтобы экспортировать или удалять сообщения. В Exchange 2010 SP1 действия по экспорту почтового ящика выполняются командлетом
New-MailboxExportRequest и рассматриваются в отдельной статье. Действия по поиску и удалению сообщений выполняются командлетом
Search-Mailbox.
Разрешения
В Exchange 2010 учетной записи должна быть назначена
роль экспорта и импорта почтового ящика для того, чтобы выполнять операцию, используя Export-Mailbox в Exchange 2010 RTM или Search-Mailbox в Exchange 2010 SP1. Если эта роль не назначена, то вы не сможете выполнять или «видеть» этот командлет.
Многофункциональный командлет Export-Mailbox может экспортировать содержимое почтового ящика на основе имен папок, диапазонов даты и времени, имен вложенных файлов и многих других фильтров. Сужение поиска предотвращает случайное удаление полезной почты. Для дополнительной информации, описания синтаксиса и параметров, смотрите следующие ссылки:
Учетная запись, используемая для экспорта информации, должна быть учетной записью Exchange Server Administrator, членом локальной группы Administrators целевого сервера и иметь полные права (Full Access) на исходный и целевой почтовые ящики. Целевой почтовый ящик должен быть заранее создан, как и целевая папка, которую вы указываете, тоже должна быть создана до выполнения команды.
Добавление и удаление необходимых разрешений
Следующий пример показывает, как извлечь все почтовые ящики организации Exchange и назначить полные права учетной записи MyAdmin. Вы должны выполнить эту операцию перед экспортом или удалением сообщений из почтовых ящиков пользователей. Отметим, что если вам необходимо экспортировать или удалить сообщения только из нескольких почтовых ящиков, то вы можете использовать командлет Get-Mailbox с соответствующими фильтрами или перечислить все исходные почтовые ящики.
Get-Mailbox -ResultSize unlimited | Add-MailboxPermission -User MyAdmin -AccessRights FullAccess -InheritanceType all
После экспорта или удаления сообщений из почтовых ящиков вы можете удалить полные права, как показано в следующем примере:
Get-Mailbox -ResultSize unlimited | Remove-MailboxPermission -User MyAdmin -AccessRights FullAccess -InheritanceType all
Удаление сообщений
Вот несколько примеров удаления сообщений.
В следующем примере удаляются все сообщения из папки Inbox почтовых ящиков на сервере Server1, которые содержат ключевые слова «Friday Party» и получены между 7-м и 9-м сентября. Эти сообщения будут удаляться из почтовых ящиков и копироваться в папку DeleteMsgs почтового ящика MyBackupMailbox. После этого администратор может просмотреть сообщения в почтовом ящике MyBackupMailbox и удалить их. Формат параметров StartDate и EndDate должен соответствовать формату даты установленной на сервере: это или mm-dd-yyyy или dd-mm-yyyy.
Get-Mailbox -Server Server1 -ResultSize Unlimited | Export-Mailbox -SubjectKeywords "Friday Party" -IncludeFolders "\Inbox" -StartDate "09/07/2010" -EndDate "09/09/2010" -DeleteContent -TargetMailbox MyBackupMailbox -TargetFolder DeleteMsgs -Confirm:$false
В этом примере из всех почтовых ящиков удаляются все сообщения содержащие ключевые слова «Friday Party» в теле или заголовке.
В зависимости от размеров вашей среды лучше выполнять извлечение/удаление в пакетном режиме, либо используя командлет Get-Mailbox с параметрами Server или Database (Get-Mailbox -Server servername -ResultSize Unlimited или Get-Mailbox -Database DB_Name -ResultSize Unlimited), либо указывая фильтр в параметре Filter. Вы можете также использовать командлет Get-DistributionGroupMember, чтобы выполнить эту операцию над членами группы рассылки.
Get-Mailbox -ResultSize Unlimited | Export-Mailbox -ContentKeywords "Friday Party" -TargetMailbox MyBackupMailbox -TargetFolder 'Friday Party' -DeleteContent
Рекомендуется всегда использовать целевой почтовый ящик (указывая параметры TargetMailbox и TargetFolder), чтобы иметь копию удаляемых сообщений. Вы можете просмотреть сообщения перед окончательным их удалением, так что любые нормальные сообщения, попавшие под действие фильтра, могут быть импортированы обратно в исходный почтовый ящик владельца. Однако можно просто удалить все сообщения без вспомогательного копирования их в другой почтовый ящик.
В этом примере из всех почтовых ящиков удаляются все сообщения, содержащие ключевые слова «Friday Party» в теле или заголовке, без копирования их в целевой почтовый ящик:
Get-Mailbox | Export-Mailbox -ContentKeywords "Friday Party" -DeleteContent
Удаление сообщений из почтовых очередей Exchange 2010 RTM и Exchange 2007
Удаление сообщения из очереди – это процесс из двух шагов. Первая вещь, которую надо сделать – это приостановить (suspend) само сообщение. Как только сообщение приостановлено, вы можете продолжить и удалить его из очереди. Следующие команды приостанавливают и удаляют сообщение на основе его заголовка.
Exchange 2007 SP1 и SP2
Следующая команда приостанавливает сообщения со строкой «Friday Party» в транспортных очередях на всех транспортных серверах организации:
Get-TransportServer | Get-Queue | Get-Message -ResultSize unlimited | where{$_.Subject -eq "Friday Party" -and $_.Queue -notlike "*\Submission*"} | Suspend-Message
На серверах Exchange 2007 RTM, SP1 и SP2 вы не можете приостановить и удалить сообщения в очередиSubmission. Так что эта команда не будет воздействовать на сообщения в этой очереди.
Следующая команда удаляет все приостановленные сообщения, исключая очередь Submission:
Get-TransportServer | Get-Queue | Get-Message -ResultSize unlimited | where{$_.status -eq "suspended" -and $_.Queue -notlike "*\Submission*"} | Remove-Message -WithNDR $False
Exchange 2010 и Exchange 2007 SP3
Следующая команда приостанавливает сообщения со строкой «Friday Party» в заголовке во всех транспортных очередях на всех транспортных серверах организации:
Get-TransportServer | Get-Queue | Get-Message -ResultSize unlimited | where {$_.Subject -eq "Friday Party"} | Suspend-Message
Следующая команда удаляет все приостановленные предыдущей командой сообщения:
Get-TransportServer | Get-Queue | Get-Message -ResultSize unlimited | Where {$_.Subject -eq "Friday Party"} | Remove-Message -WithNDR $False
Отметим, что вы можете выполнять эти команды на конкретном транспортном сервере, указав его имя после Get-TransportServer.
Приостановка и удаление сообщений в заданной транспортной очереди
Вы можете приостановить и удалить сообщения из конкретной очереди. Чтобы получить список очередей на транспортном сервере, используйте командлет Get-Queue.
Следующая команда приостанавливает сообщения со строкой «Friday Party» в заголовке из заданной очереди:
Get-Message -Queue "server\queue" -ResultSize unlimited | where{$_.Subject -eq "Friday Party"} | Suspend-Message
Следующая команда удаляет все приостановленные предыдущей командой сообщения из заданной очереди:
Get-Message -Queue "server\queue" -ResultSize unlimited | where{$_.Subject -eq "Friday Party" } | Remove-Message -WithNDR $False
Предотвращение доставки сообщений с помощью транспортных правил
В Exchange 2010 и Exchange 2007 вы можете использовать транспортные правила для того, чтобы проверять сообщения в транспортном потоке и выполнять необходимые действия, подобные удалению сообщений, на основе заданных критериях. Для дополнительной информации смотрите
Общие сведения о правилах транспорта.
В Exchange 2010 и Exchange 2007 вы можете использовать визард создания нового транспортного правила (New Transport Rule) в оснастке EMC, чтобы легко создавать транспортные правила. Следующие примеры иллюстрируют, как добиться того же самого через командную строку. Отметим различия синтаксиса между версиями. (В Exchange 2010 командлеты транспортных правил упрощены, позволяя вам создавать и модифицировать транспортные правила в одну строку).
Создание транспортного правила для удаления сообщения в Exchange 2010
В следующем примере создается транспортное правило для удаления сообщения со строкой «Friday Party» в заголовке:
New-TransportRule -Name "purge Friday Party messages" -Priority '0' -Enabled $true -SubjectContainsWords 'Friday Party' -DeleteMessage $true