Миграция Exchange Server 2003 на Exchange Server 2007

Перемещение почтовых ящиков между лесами.

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

Здесь будет описана процедура переноса ящиков. Т.е. подразумевается, что пользовательские учетки вы уже перевели в новый лес. Если нет – эта процедура первоочередной важности, и должна быть успешно завершена до того как вы будете переносить сами почтовые ящики. Тоже самое касается переноса контактов и групп рассылки. Делается это с помощью Active Directory MIgration Tool 3.0 (ADMT v3), а руководство по применению ADMT – здесь

Перенос ящиков между доменами одного леса, или в пределах одного домена является очень уж тривиальной задачей. Однако, если понадобится, рассмотрим и этот вопрос. Перевод же компании между лесами AD, и по-сути, между организациями Exchange – представляется по первому времени – сложной задачей. Однако это не так. Сценарий переноса ящиков справедлив для всех случаев:
Exchange 2000 Server }
Exchange Server 2003 } => Exchange Server 2007
Exchange Server 2007 }

0. Как известно, перенести почтовые ящики из одного леса в другой при помощи графического интерфейса Exchange невозможно, и мы будем использовать EMS – Exchange Management Shell. PS:>_

Итак, учетки перемещены в новый лес Active Directory, переносим почтовые ящики:

1. Минимальные права для выполния переноса ящиков:
В исходной организации (лесу AD):
Администратор получателей Exchange, администратор сервера Exchange (Exchange Full Administrator в Exchange 2000/2003 и Exchange Recipient Administrator + Exchange Server Administrator в Exchange 2007) и членство в локальной группе администраторов, на сервере Exchange.
Эту учетку мы укажем параметром -SourceForestCredential

В целевой организации (лесу AD): такие же –
Exchange Recipient Administrator, Exchange Server Administrator в Exchange 2007 и членство в локальной группе администраторов, на сервере Exchange.
Эту учетку мы укажем параметром -TargetForestCredential

1.1 Для всех топологий с несколькими лесами, содержащих Exchange 2007, необходимо, чтобы в каждом лесу сервера GC (Global Catalog) работали под управлением Windows Server 2003 SP1, а лучше SP2. Тоже самое касается исходных лесов AD, хотя бы один GC должен быть под управлением Windows Server 2003 SP1 или выше, иначе командлет Move-Mailbox не сможет перенести оттуда ящики.

1.2 Содержимое Deleted Items в почтовых ящиках обычно не перемещается, и по этому поводу существует инструкция: “Настройка сохранения удаленных почтовых ящиков и элементов”

2. На целевом сервере Exchange 2007, где будет выполняться командлет Move-Mailbox, нужно провести объявить переменную $SourceCredential, и присвоить ей текущую учетную запись админа, выполняющего миграцию.
$SourceCredential = Get-Credential
Будут запрошены учетные данные. Нужно указать учетную запись администратора исходной организации Exchange.

3. Там же на целевом сервере Exchange 2007, объявляем еще одну переменную – админа целевой организации, выполняющего миграцию.
$TargetCredential = Get-Credential
И вводим учетную запись администратора целевой организации.

4. Все там же на целевом сервере:
Move-Mailbox -TargetDatabase "Target ServerFirst Storage GroupMailbox
Database" -Identity SampleUser -GlobalCatalog GC1.targetdomain.ru
-SourceForestGlobalCatalog GC2.sourcedomain.ru -NTAccountOU
"OU=MigrationOU,DC=targetdomain,DC=ru" -SourceForestCredential
$SourceCredential -TargetForestCredential $TargetCredential

Где SourceDomain.ru – исходный домен, TargetDomain.ru – целевой домен.
Команды отрабатываются на конечном сервере.
Не забывайте, что любые имена серверов, учетных записей, итп, содержащие пробел – должны писаться в кавычках.

Параметры GlobalCatalog и SourceForestGlobalCatalog используются для определения местоположения почтового ящика в исходном лесу и в лесу назначения. Если не указан глобальный каталог исходного леса или конечного леса, лес локального компьютера, на котором запущена команда Move-Mailbox, будет использован для определения используемого сервера глобального каталога. Чтобы переместить почтовый ящик между разными лесами, необходимо указать хотя бы один из этих двух параметров.

Параметр NTAccountOU указывает подразделение организации в конечном лесу, в котором будет создана учетная запись пользователя для почтового ящика, если она не существует, или в месте, где находится учетная запись пользователя (если она существует).

4.1 Если следует сохранить политики получателя в почтовом ящике после его перемещения, используйте параметр:
... -IgnorePolicyMatch:$true

4.2 Если вы хотите отфильтровать перемещаемый контент в ящиках, можно использовать фильтры, например:
... -AttachmentFilenames *.doc -ExcludeFolders InboxNoTransfer,InboxOld
-RecipientKeywords SampleUser@SourceDomain.ru

Следующие фильтры указывают типы данных для перемещения в ящиках:
-AllContentKeywords – слова встречающиеся в теме, теле и/или аттачментах писем
-ContentKeywords – слова встречающиеся теле и/или аттачментах писем
-SubjectKeywords – слова встречающиеся теме писем
используйте либо -AllContentKeywords, либо “-ContentKeywords” + “-SubjectKeywords”
-AttachmentFilenames – типы файлов в аттачменте (*.doc,*.docx,*.xlsx)
-StartDate – письма полученные от начала указанной даты (мм/дд/гггг – зависит от региональных настроек сервера)
-EndDate – письма полученные до конца указанной даты (мм/дд/гггг – зависит от региональных настроек сервера)
-ExcludeFolders – исключая следующие папки в ящике, начиная от корня “”, через запятую и без пробелов.
-IncludeFolders – включая следующие папки в ящике, начиная от корня “”, через запятую и без пробелов.
-RecipientKeywords – для следующих получателей, по имени или smtp адресу.
-SenderKeywords – от следующих отправителей, по имени или smtp адресу.

4.3 для сохранения квот на размеры почтовых ящиков после переноса:
... -PreserveMailboxSizeLimit $true

4.4
-ValidateOnly – проверить права на выполнение миграции ящиков.

4.5
-WhatIf – проверить правильность составления всей команды.

По умолчанию команда Move-Mailbox не удаляет ни исходный почтовый ящик, ни исходную учетную запись пользователя. Если вы перемещаете почтовый ящик пользователя в новый лес, причем учетная запись уже перемещена при помощи ADMT, и необходимо удалить и исходный почтовый ящик, и исходную учетную запись после перемещения почтового ящика
4.6 Операции с исходным ящиком:
-SourceMailboxCleanupOptions DeleteSourceNTAccount
DeleteSourceMailbox – удалить исходный ящик,
CreateSourceContact – удалить учетку и создать вместо нее контакт. Используется для перенаправления почты из старого домена в новый, в ящики на сервере Exchange 2007.
MailEnableSourceAccount – переделать mailbox-enabled user в mail-enabled user с хостингом почтового ящика на Exchange 2007 в целевом домене, разница с предыдущим ключом – сохраняются права пользователя в исходном домене.

5. Остается только проверить успешность переноса ящика на целевой сервер, любым удобным для вас способом – OWA, Outlook, ActiveSync итд.

Удачной миграции!

82 thoughts on “Миграция Exchange Server 2003 на Exchange Server 2007”

  1. Максим спасибо, а можете рассказать про Export-Mailbox ? Вернее про трудности кторые могут возникнуть, а то у меня не получается при экспорте удалить данные которые я выгружаю.
    Спасибо

    1. Здравствуйте,
      Get-Mailbox –Database SourceDB | Export-Mailbox -TargetMailbox sampleUser -DeleteContent
      при этом Export-Mailbox не работает между лесами, исходный и целевой ящики должны быть в пределах одного леса. Исходный сервер должен быть Exchange Server 2007 / 2003 SP2 / 2000 SP3.
      Кроме того, при экспорте писем, с применением Outlook 2003, Export-Mailbox не удаляет более 4000 сообщений из ящика. Нужно использовать Outlook 2007.
      Export-Mailbox не достает письма из Recovery Storage Group.

      Проверяйте, и рассказывайте подробней – что, откуда, куда, экспортируете, версии, SP?, сообщения об ошибке – чем подробней, тем лучше.

  2. о как.. поставил Office 2007 все получилось.. спасибо…
    Но возникла следующая проблема.
    У меня создано Транспортное правило, оно шлет копию всех писем (входящихисходящих) в ящик AllMessages. Его-то я и хочу раз в месяц чистить и сбрасывать в pst.
    Проблема сейчас в том что при удалее из этого ящика.. пользователям шлется уведомление
    >> Your message was deleted without being read on Friday, June 27, 2008 1:10:16 PM (GMT+05:00) Ekaterinburg
    Что пользователей и раздражает и пугает… Как избавится от этого?

    1. Проблема сейчас в том что при удалее из этого ящика.. пользователям шлется уведомление
      >> Your message was deleted without being read on Friday, June 27, 2008 1:10:16 PM (GMT+05:00) Ekaterinburg
      Что пользователей и раздражает и пугает… Как избавится от этого?

      А почему вы не пользуете Message Journaling Rule вместо транспортного? Тогда сообщений не будет (у меня юзеры ничего такого не видят). Правда это потребует Enterprise лицензию на HT.

  3. Попробывал еще раз запустить.. удаление за другой день.. и вот что нашел

    StatusCode : -1056749164
    StatusMessage : Error occurred in the step: Moving messages. Failed to copy messages to the destinat
    ion mailbox store with error:
    MAPI or an unspecified service provider.
    ID no: 00000000-0000-00000000

  4. При использовании Message Journaling Rule сообщения идут не оригинальные, а во вложении. что не всегда удобно..
    В 2003 было проще.
    Потому и сделал на Транспорте.. в данный момент я создал еще одно транспортное правило.. типа убивать все письма from AllMessages . Вот только не пойму какой приоритет ему выставить 🙂

  5. Ну, уважаю ваше мнение, однако придерживаюсь своего. MJR сохраняет выловленное письмо в оригинальном нетронутом виде, и кроме того никак не светится у отправителей/получателей.
    Насчет вашего транспортного правила ” убивать все письма from AllMessages” – не очень понятно. Я бы в таком случае делал Message Records Management rule для зачистки контента собирающего ящика. Это уже не юрисдикция транспортных агентов, так что приоритеты не понадобятся. Вариант?

  6. А вот про
    > бы в таком случае делал Message Records Management rule
    поподробней.. или ссылку на нее 🙂

  7. Максим, скажите, а как решить такую же задачу, но с условием, что на целевом сервере тоже Exchange 2003? есть подобные инструменты?

  8. To AAz:
    Можно, смотрите хотя-бы тотже Quest.
    Вот только зачем? В смысле зачем сегодня чтото переносить на Exchange Server 2003, если завтра понадобится перенести это все уже на Exchange 2007? Двойная работа, никакой выгоды, одни затраты…

  9. Какой сервер для Exchange 2007 посоветуете использывать? Windows 2003 SP2 64-бит или Windows 2008 64-бит?

  10. Максим спасибо за очень полезную статью!
    Все делал как Вы и описали , сначала перенес пользовательскую учетку с паролем, после этого переместил почтовый ящик пользователя в то же самое место куда перенес учетку, в результате создалась еще одна заблокированная учетная запись, попытка настроить почту для перенесенной учетной записи закончилась неудачей, т.к. нет доступа к почтовому ящику!
    Подскажите пожалуйста что я делаю ни так!!!
    Спасибо!

  11. Андрей,
    Сервера в принципе равнозначны, за исключением ньюансов:
    1. Разная стоимость ОС, лицензий,
    2. Для бэкапа Exchange 2007 на Windows 2008 нужно будет приобрести SC-DPM – MS System Center Data Protection Manager http://www.microsoft.com/systemcenter/dataprotectionmanager/ , в Windows 2003 можно обойтись встроенным NTBackup. Или если вы используете стороннее решение архивации (Symantec, BrightStore, etc) – смотрите на сайте производителя – поддерживает ли он конфигурацию Exchange 2007/Windows 2008

  12. Николай:
    Трудно заочно с ваших слов диагностировать проблему. Вероятно при перенесении учетки ADMT вы оставили опцию создать заблокированную учетку/не удалять прежнюю.
    Мне видится проблема в этом моменте.
    Попробуйте удалить новую учетку, и перенести оригинал снова, внимательно смотрите не опции, удачи.

  13. Максим, когда я ADMT переношу учетку, она переносится корректно без ошибок и нормально в новом домене функционирует, после этого начинаю переносить почтовый ящик данного пользователя, при помощи командлета, он тоже нормально переносится, НО создается еще одна учетка(заблокированная) к которой этот ящик примонтирован, это так и должно быть? Как перенесенный ящик примонтировать к перенесенной ADMT учетной записи?
    Спасибо!!!

  14. При переносе на целевом Exchange2007 создается не user mailbox, a linked mailbox. В чем может быть проблема? Заранее спасибо за ответ

  15. Максим здравствуйте.
    Помогите плз советом….

    Есть домен 2003 с exchange 2003. Поднят новый домен 2003 и exchange 2007
    Миграцию пользователей, компьютеров провел. Трасты натянуты, днс подправлен, новый почтовый настроен, общие папки смигрированы в новую организацию, сделан общий глобальный список адресов. При миграции пользователя и его рабочей машины в новый домен почтовый ящик остается еще в старом домене(большой объем и сразу перенести ящики не выйдет).
    Возник вопрос:

    – При переносе ящика из одного леса в другой как направить почту данному сотруднику в новый лес? ставить форвард на ящике или можно сделать это более централизовано?
    С офисными более менее понятно (благодаря вашей статье)
    но есть около 500 сотрудников, которые пользуются не аутлуком а OWA и входят в 150 рассылок которые на данный момент уже перетянуты в новый домен. (работа в почте пока ведется в старом домене).

    1. Артем!
      Все выходные я буду в Суздале, на MVP Open Days, а на следующей неделе обязательно помогу вам разобраться!

    2. Процесс миграции пользователя изменяет значение аттрибута homeServer, в свойствах пользователя, со прежнего Exchange сервера – на новый. Так что почта автоматически всегда будет уходить на новый сервер, куда перемещен ящик пользователя.
      Если письмо на этот адрес направлено, а ящик все еще в процессе переезда, то т.к. первым делом изменяется аттрибут в AD, а затем переносятся сообщения, также первым делом считывается аттрибут, а затем маршрутизируется сообщение. Так что уйдет на новый сервер.

      1. Понятно, это постараюсь проверить в ближайшее время.
        А как быть с рассылками? если пользователи будут кочевать постепенно, то есть рассылки будут раздроблены, Универсальные группы между лесами не включишь одна в другую… переделать все группы в “Локальная в домене”? или есть еще какой-то способ?

        1. Что же касается доставки почты – Поскольку трасты между лесами у вас уже есть; На Exchange 2003 в свойствах SMTP virtual server нужно включить опцию пересылки всех unresolved recipients на Hub Transport в новой организации. Так вы решите эту задачу.

      2. Максим, а данный атрибут также изменяется и при миграции между лесами? Исходную учетную запись лучше отключать, удалять?

        1. Учетные записи в старом лесу с уже мигрированным ящиком лучше отключать и даже удалять вместе с ящиками. При этом, если в старом лесу еще остались нужные ресурсы, необходимо давать группам смигрированных учетных записей разрешения на эти группы.

    3. Артём, добрый день!

      Подскажите пожалуйста, где бы прочитать мануал, как надо мигрировать общие папки?
      Заранее очень благодарен.

  16. Потихоньку планируем осваивать Exchange 2007 – на начальном этапе просто установили edge на отдельной виртуальной машине подскажите нужно ли настраивать adam для синхронизации с существующим доменом если первичная его роль будет как фильтрующий relay. В настоящий момент через него проходит входящая почта, настроить передавалась исходящая (в инет) и при этом он не был бы open relay не удалось. Это вооще возможно?

    1. Нет, ADAM вам почти не пригодится (а возможно даже и помешает), пока у вас не будет HubTransport внутри.
      “Фильтрующий Relay” это хорошо, только вы не забудьте туда еще поставить какой-нибудь антивирусник, типа Forefront Security for Exchange, а то, понимаете-ли, “один в поле – не трактор”.
      Да, настроить так можно, я как раз собираюсь написать об этом подробнее, отдельной статьей.
      Вам нужно сделать изнутри коннектор на ET (send) и на самом ET (send+recieve в интернет) и (send+recive внутрь). Все коннекторы, кроме смотрящих в интернет, можно и нужно будет сделать под аутентификацией, тогда он не будет у вас open relay.

  17. Спасибо. Forefront Security for Exchange как раз куплен и установлен но он как мне показалось в большей степени антивирус, а не антиспам. Настройки антиспама в нем мне кажется не превосходят имеющиеся в ET. Впрочем надо ознакомиться еще с докладом с платформы2009 – Forefront как средство антиспама.

    P.S. Интеграторы (Крок) пугают что после апгрейда схемы под exchange 2007 развертываение 2003 будет затруднительно. Стоит ли им верить?

    1. Отлично! Forefront Security – лучший выбор!
      Он в должных количествах антивирус и антиспам. Вы же видели в нем компонент Microsoft, с которого выбор не снимается, при установке FF? вот это – один из основных антиспам движков. Настройки там не превосходят, а дополняют ET. Так что все в порядке.
      Разговорчивые интеграторы пусть учат матчасть. В пределах Exchange 2003, при апдейте схемы под Exchange 2007 – никаких особых проблем с инсталляцией Exch2003 не возникает. Либо они недосказали/вы недослушали, либо они не в теме.

  18. Максим, а Exchange 2007 SP1 нормально функционирует с read-only DC на Win2008 ? Есть мысль пересадить регионы на RO DC но вопрос функционирования в таком режиме Exch2007 под вопросом. Если ли информация по данному вопросу.

    1. НЕТ!
      Exchange Server 2007 практически постоянно считывает и записывает массу информации из Configuration Partition, а соответственно RODC использовать для него нельзя. Как минимум 1 DC и GC обязаны присутствовать в каждом конкретном сайте с Exchange 2007.
      Еще подробней что-нибудь хотите? Официальную ноту с TechNet найдете или нужна помощь?

  19. Добрый день. Собираюсь вот в командировку. Расскажите, пожалуйста, как вы занимаетесь с интернетом, когда приходится быть далеко от дома?

    1. Уважаемая Катя!
      В командировках мы занимаемся отнюдь не “с интернетом” (тсс! 😉 )
      Ну а если серьезно – вся мобильная переписка, рабочая почта, мгновенные сообщения между корпоративным Exchange Server 2007 и ActiveSync‘ами на коммуникаторах членов проектной группы обслуживаются по Edge. Это помогает всегда и везде быть оперативно на связи. Чего и вам рекомендую.

  20. OK, помогу всем чем смогу.
    ExBPA в Exchange 2003 – Test System Health сделайте, для начала. Будем смотреть что к чему.
    Также включите Diagnostics Logging там же, на сервере с которого снимаете ящики, logging MAPI, Mailbox и все что с этим связано, попробуйте перенести ящик, и смотрите логи. Сюда их тоже запостите.

    PS: Очень нехорошо вы мигрировали почтовую организацию, зачем было делать “клонирование диска” и Exchange ” /disasterrecovery” – обе процедуры – ниразу не для миграции, а с DC такие вещи нужно вообще запретить на уровне MSKB.

    1. в общем, все в нормальной, работающей сети, прошло успешно 🙂
      спасибо что откликнулись!

  21. Максим здравствуйте.
    При миграции почтовых ящиков возникло пару вопросов, а именно:
    при использовании скрипта
    $source = get-credential
    $target = get-credential
    $users = import-csv c:1.csv

    $users | foreach { $_.Identity } | get-mailbox -DomainController siurcedc -credential $source | move-mailbox -targetdatabase “ExchFirst Storage GroupMailbox Store” -GlobalCatalog targetdc -SourceForestGlobalCatalog sourcedc -DomainController targetdc -SourceMailboxCleanupOptions MailEnableSourceAccount -SourceForestCredential $Source -TargetForestCredential $Target -confirm:$false -maxthreads:10

    при миграции одного тестового почтового ящика ящик в новую организацию виден как User Mailbox, а при миграции более 10- тестовых ящиков ящики отображаются как Linked Mailbox, так и должно быть?

    Ранее я писал про миграцию общих папок. Тоже возник вопрос, папки смигрировались вроде как без проблем, но не смигрировались разрешения на эти папки, как можно это исправить?

    Заранее спасибо за ответы на вопросы 🙂

    1. нет, не должны быть linked mailbox. Судя по тому что один ящик мигрирует нормально, а множество – только как linked – вероятно проблема в выборе массива в скрипте. Попробуйте упростить всю процедуру.

  22. Здравствуйте, Максим!
    Возникла проблема, не могу от неё избавиться. Главная цель – удалить все письма до определённой даты. Ну понятно, опцию export-mailbox’у дать и делов-то, но не так-то было..
    Если экспортирую так:
    Export-Mailbox -identity user1@domain.ru -PSTFolderPath C:user1.pst -Verbose
    то все хорошо(за исключением, что ящик из 6 метров превращяется в файл 500 метров, появляется 15к в корзине писем 🙂 ), экспортируется без ошибок.
    А если добавляю -EndDate “01.01.2009” то после секунд 15 слетает с ошибкой скрипт:
    Export-Mailbox : Обнаружена ошибка для Пупкин Василий (user1@domain.ru), причина: Ошибка произошла в действии: Перемещение сообщений. Не удается скопировать сообщения в конечное хранилище почтовых ящиков. Ошибка:MAPI или неизвестный поставщик услуг.
    Идентификатор: 00000000-0000-00000000, код ошибки: -1056749164
    При этом появляется файл экспорта, подцепляю – такое ощущение, что игнорирует дату и там есть письма за сегодняшний день и за 2008 год тоже.
    В региональный настройках краткая дата дд.мм.гггг.
    В чем можт быть проблема? Сообщений никаких в эвент логе на exchange 2007 sp1 update6 не появляется.
    На компьютере стоит outook 2007 с последними апдейтами.

    1. Здравствуйте Александр,
      подозреваю что в некоторых экспортируемых ящиках ваших пользователей лежат битые или какие-либо некорректные сообщения. Это может быть заголовок или содержимое, не суть важно.
      Попробуйте обойти их ключом -BadItemLimit 10 к примеру, чтобы повыкидывать поврежденные письма. Если в целом ваша база работает в порядке – большого урона это не нанесет. Можете кстати провести проверку баз данных Exchange с помощью ExBPA у вас в Toolbox – тоже, опасности никакой, а если более-менее значимые проблемы есть – вы их увидите.

    2. Кстати, сообщение об ошибке напоминает проблемы с наличием администраторских прав на ящик.
      Попробуйте-ка лучше Add-MailboxPermission -Identity <почтовый_ящик> -User <Exchange_Server_Administrator> -AccessRights FullAccess

Leave a Reply

Your email address will not be published.