Удаление отдельных сообщений с сервера Exchange


Время от времени администратор Exchange сталкивается с ситуацией, когда сообщения соответствующие определенным критериям должны быть удалены из большого числа почтовых ящиков или транспортных очередей сервера Exchange. Такая необходимость может возникнуть из-за какой-либо массовой рассылки, когда сообщение отправлено случайно в большую группу рассылки или большому числу отдельных получателей или когда нужно предпринять усилия по очистке от последствий распространения вируса массовой почтовой рассылки (хотя они встречаются все реже и являются предметом заботы антивирусных сканеров серверов Exchange).

Соответствующие шаги описаны в различных местах документации Exchange, но может быть достаточно трудно, чтобы обратиться к нескольким источникам, если вы имеете смешанную среду содержащую несколько версий Exchange сервера. Мы хотели бы собрать в одном месте в некоторой степени обобщенные инструкции о том, как выполнить эти задачи во всех ныне поддерживаемых версиях Exchange Server – Exchange 2010, Exchange 2007 и Exchange 2003.

Удаление сообщений из почтовых ящиков

Удаление сообщений из командной строки в 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 может экспортировать содержимое почтового ящика на основе имен папок, диапазонов даты и времени, имен вложенных файлов и многих других фильтров. Сужение поиска предотвращает случайное удаление полезной почты. Для дополнительной информации, описания синтаксиса и параметров, смотрите следующие ссылки:

• Export-Mailbox
• How to Export Mailbox Data
• Exchange Server 2007 Export Mailbox task

Учетная запись, используемая для экспорта информации, должна быть учетной записью 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 2003 and Exchange 2000 с помощью  ExMerge

Утилита ExMerge может использоваться на Exchange серверах старых версий для экспорта почтовых сообщений. Шаги для удаления нежелательных сообщений их почтовых ящиков пользователей описаны в статье KB 328202 Удаление зараженных вирусом сообщения из почтовых ящиков с помощью средства ExMerge.exe.

Удаление сообщений из общих папок

Вы можете использовать Outlook Object Model для того, чтобы удалять сообщения из общих папок. Это работает на любой версии сервера Exchange. Обратная сторона этого варианта в том, что он медленный и может затыкаться, когда он обрабатывает очень большие папки в десятки тысяч записей. В Exchange 2010/2007 вы можете использовать Exchange Web Services для удаления сообщений из общих папок. EWS не имет проблем с большими папками.

Для дополнительной информации смотрите следующие статьи:

• Cleaning Viruses In Public Folders Using OOM
• Cleaning Viruses In Public Folders Using EWS

Удаление сообщений из почтовых очередей

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

Удаление сообщений из почтовых очередей 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 Server 2000 в Exchange Server 2003 с помощью MFCMAPI

В Exchange 2003/2000 вы можете использовать MFCMapi для отчистки очередей сообщений. Для дополнительной информации смотрите статью KB 906557  «Как использовать утилиту Mfcmapi.exe для просмотра и работы с сообщениями в SMTP TempTables в Exchange 2000 Server и Exchange Server 2003».

Если в очередях находится большое количество сообщений, то вы, скорее всего, захотите ограничить число сообщений отображаемое за один раз. В панели инструментов этой утилиты выберете Other > Options и в поле Throttle Level измените значение на более предпочтительное (например, 1000).

Предотвращение доставки сообщений с помощью транспортных правил

В 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

Создание транспортного правила для удаления сообщения в Exchange 2007

В следующем примере создается транспортное правило для удаления сообщения со строкой «Friday Party» в заголовке:

$condition = Get-TransportRulePredicate SubjectContains
$condition.Words = @(“Friday Party”)
$action = Get-TransportRuleAction DeleteMessage
New-TransportRule -name “purge Friday Party messages” -Conditions @($condition) -Actions @($action) -Priority 0

Примечание: если в вашей организации Exchange работают совместно обе версии Exchange 2007 и Exchange 2010, то вы должны создать отдельное транспортное правило для каждой версии.

Анжелика Конде, Эд Бринджес

Перевод: Илья Сазонов, MVP

Comments (4)

  1. Оригинал статьи был написан до выхода sp1.

    В sp1 вместо export-mailbox надо использовать New-MailboxExportRequest

  2. Андрей says:

    Удаление отдельных сообщений в Exchange 2010 SP1 с помощью командлета Export-Mailbox не работает

  3. Ivan Makarov says:

    Да, в начале статьи про это написано.

  4. user says:

    К, сожалению, в русской версии Exchange 2007 ключи "-ContentKeywords" и "-ContentSender" не работают. Экспортируются все письма, не зависимо от строковых значений ключей.

Skip to main content