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

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

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

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

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

Удаление сообщений из почтовых очередей 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

Следующая команда удаляет все приостановленные сообщения, исключая очередь 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 вы можете использовать визард создания нового транспортного правила (New Transport Rule) в оснастке EMC, чтобы легко создавать транспортные правила. Следующие примеры иллюстрируют, как добиться того же самого через командную строку. Отметим различия синтаксиса между версиями. (В Exchange 2010 командлеты транспортных правил упрощены, позволяя вам создавать и модифицировать транспортные правила в одну строку).

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

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

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

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

Статья имеет своей целью обобщить некий опыт решения такой проблемы, полученный
из разнообразных источников.

Подобная ситуация конечно встречается не часто, и уж раз вы в нее попали, то как правило,
никого кроме себя тут винить нельзя. Вот так же и в данной ситуации, все сложилось так
что в сети был установлен Exchange сервер, в единственном экземпляре, потом он не был
удален, зато, вместо Windows сервера на которой он был установлен, поставлена другая
версия Windows.
В результате этих не очень умных операций получилось следующее.
Есть Windows Server 2003 EE 64bit (свежеустановленный), который является мембером домена.
В Active Directory остался полный набор элементов от предыдущей установки MS Exchange 2007.
При повторном запуске инсталляции программа установки выдает ошибку (без расшифровки).
Бэкап системного состояния из которого можно бы было востановить AD имеет срок давности
более 14 дней, соответственно, возвращаться к нему очень не желательно, так как за этот
срок пароли по которым компьютеры идентифицируют себя в домене изменились.

Наша задача, востановить в сети работоспособный Exchange сервер.
Итак, для начала, пробуем подготовить службу каталога для установки нового экземпляра
Exchange сервера. Запускаем из командной строки setup /prepareAD. В результате выполнения
получаем сообщение об ошибке, но теперь оно по крайней мере более внятное. В процессе
подготовки AD система обнаружила в одном из параметров объекта конетейнера Configuration
(cn=Configuration,dn=domain,dn=ru) запись, которая указывает на существующее или
удаленное различающееся имя. Указанная запись находится в параметре otherWellKnownObjects.
Без удаления этой записи продолжение установки невозможно. На самом деле, если мы
попробуем найти указанную запись, например используя команду dsquery с параметром -attr,
то в контейнере Configuration мы ее не найдем. Она существует, но расположена она на два
уровня глубже, «cn=Maicrosoft Exchange,cn=Services,cn=Configuration,dn=domain,dn=ru». В
данном случае, для работы с каталогом мы будем использовать утилиту ldp.exe, входящую
в состав support tools. Найти ее можно на установочном диске Windows Server ../support/tools

Запускаем ldp.exe, в меню Connection выбираем пунк Connect и указываем сервер,
являющийся нашим глобальным каталогом. Затем в том же меню выбираем пункт Bind,
указываем данные учетной записи администратора домена и сам домен, и аутентифицируемся
в системе. Для удобства и наглядности в меню View ставим галочку на пункте Tree, выбираем
базовый контейнер просмотра cn=Configuration,dn=domain,dn=ru после чего в левой части
окна появляется дерево каталога. Открывая узлы «+» идем в контейнер
«cn=Maicrosoft Exchange,cn=Services,cn=Configuration,dn=domain,dn=ru». Двойным кликом на
контейнере получаем в просмотровой части программы все параметры и записи содержащиеся
в контейнере. Находим параметр otherWellKnownObjects и убеждаемся что в нем действительно
присутствует запись которую мы уже видели в сообщении об ошибке, при выполнении команды
setup /PrepareAD. По правой кнопке мышки на нужном контейнере в дереве мы из контекстного
меню можем осуществить ряд действий, в том числе и модифицирование.

Если выбрать редактирование то получаем возможность указанному нами параметру
присвоить нужное нам значение. В нашем случае было бы достаточно в окне параметров указать
otherWellKnownObjects и поставить галочку на радиокнопке edit, затем Enter и Run. После этого
инсталляция скорее всего пройдет нормально, но сами службы не запустятся, поскольку при
аутентификации служб используются ключи kerberos, а они изменились, так как изменился
идентификатор безопасности.

Поскольку у нас в сети был только один Exchange сервер, будет лучше удалить полностью
все записи относящиеся к предыдущей установке. Для этого в дереве контейнеров выбираем
контейнер cn=Maicrosoft Exchange,cn=Services,cn=Configuration,dn=domain,dn=ru в контекстном
меню выбираем пунк Delete, ставим галочку на рекурсивном удалении (естественно), и
подтверждаем что мы именно этого и хотим. После этого спокойно закрываем ldp и
возвращаемся к установке Exchange сервера. Все должно пройти хорошо.

Может возникнуть ситуация, когда после удачной установки и запуска нового экземпляра
Exchange пробуем завести почтовый ящик пользователя, пробуем соединиться по owa, все
хорошо, при попытке настройки MS Outlook 2007 получаем следующую ошибку: Невозможно
завершить действие Недопустимая закладка. Решается проблема перезагрузкой сервера
глобального каталога.

Недавно пришлось столкнуться с задачей удаления Exchange 2007 в одной организации. Все настроено достаточно просто – один домен, в нем один сервер Exchange 2007. Задача – максимально корректно удалить все упоминания о сервере в домене. Вроде бы ничего сложного, но в процессе удаления возникла пара моментов, которые я хотел бы здесь осветить.

Информация по удалению, разумеется, есть и на сайте Microsoft

Согласно ей, помимо всего прочего, перед удалением Exchange требуется удалить все его базы (в самом простом случае это база почтовых ящиков и база public folders). Сначала необходимо удалять именно вторую базу, ибо если удалить базу почтовых ящиков, то подключиться к базе общих папок не выйдет.

На этапе удаления базы общих папок и возникает первый момент, о котором я хотел бы рассказать. Сама процедура удаления описана в http://technet.microsoft.com/en-us/library/cc164367.aspx и http://technet.microsoft.com/en-us/library/bb201664.aspx . Все бы ничего, но удаление не проходит, выдается сообщение про то, что в базе есть реплики для папок и сначала необходимо удалить их.

В итоге после долгих поисков удалось найти нормальное, на мой взгляд, решение проблемы .

Вот команды, которые позволяют удалить public folders database:

Get-PublicFolder -Server “\” -Recurse -ResultSize:Unlimited | Remove-PublicFolder -Server

Get-PublicFolder -Server “\Non_Ipm_Subtree” -Recurse -ResultSize:Unlimited | Remove-PublicFolder -Server -Recurse -ErrorAction:SilentlyContinue

Get-PublicFolderDatabase -Server | Remove-PublicFolderDatabase -RemoveLastAllowed

После этого выполняем все остальные шаги, указанные в инструкции по удалению и запускаем процесс удаления Exchange с сервера через «установку и удаление программ».

Если все было сделано правильно, то предварительная проверка пройдет нормально и можно будет приступить к удалению ПО.

Тут тоже есть одна тонкость. На самом последнем шаге удаления (удаление файлов exchange) процесс застывает в ожидании. Не стоит давать дополнительное время в надежде, что все сейчас заработает, толку не будет. Данная проблема тоже известна и описана в KnowledgeBase . Решение простое – удаляем через task manager процесс powershell.exe и удаление Exchange успешно завершается

Возможно, кому-нибудь будет полезна данная информация