Подготовка почтовых ящиков к перемещению между лесами с помощью командной консоли Exchange

Exchange Server поддерживает перемещение и миграцию почтовых ящиков с помощью командлетов New-MoveRequest и New-MigrationBatch командной консоли Exchange. Вы также можете переместить почтовый ящик в Центре администрирования Exchange (EAC).

  • В Exchange 2016 можно переместить почтовый ящик Exchange 2010, Exchange 2013 или Exchange 2016 из исходного леса Exchange в целевой лес Exchange 2016.

  • В Exchange 2019 можно переместить почтовый ящик Exchange 2013, Exchange 2016 или Exchange 2019 из исходного леса Exchange в целевой лес Exchange 2019.

Чтобы выполнить командлеты New-MoveRequest и New-MigrationBatch, пользователь почты должен существовать в конечном лесу Exchange и этого пользователя должен быть минимальный набор требуемых атрибутов Active Directory.

Пример скрипта Exchange PowerShell, описанный в этом разделе, поддерживает эту задачу путем синхронизации пользователей почтовых ящиков из исходного леса Exchange с целевыми лесами Exchange в качестве пользователей почты (также известных как пользователи с поддержкой почты). Скрипт копирует атрибуты Active Directory пользователей почтовых ящиков в исходном лесу в целевой лес, а затем использует командлет Update-Recipient для преобразования целевых объектов в почтовых пользователей.

Дополнительные сведения об использовании и написании скриптов см. в разделе О скриптах. Дополнительные сведения о подготовке к перемещению между лесами см. в разделе Подготовка почтовых ящиков к запросам на перемещение между лесами.

Ищете другие задачи управления, связанные с запросами на удаленное перемещение? См. раздел Управление перемещением локальных почтовых ящиков в Exchange Server.

Что нужно знать перед началом работы

  • Найдите скрипт Prepare-MoveRequest.ps1 в папке %ExchangeInstallPath%Scripts. По умолчанию %ExchangeInstallPath% имеет значение C:\Program Files\Microsoft\Exchange Server\V15\ (обратите внимание на значение "\").

  • Для выполнения этого примера сценария необходимы следующие компоненты:

    • Исходный лес Exchange (где сейчас находится почтовый ящик).

      • Для целевых лесов Exchange 2016 исходный почтовый ящик может находиться в Exchange 2010, Exchange 2013 или Exchange 2016.

      • Для целевых лесов Exchange 2019 исходный почтовый ящик может находиться в Exchange 2013, Exchange 2016 или Exchange 2019.

    • Целевой лес с установленным Exchange 2016 или Exchange 2019 (куда будет перемещен почтовый ящик).

Совет

Возникли проблемы? Обратитесь за помощью к участникам форумов Exchange. Посетите форумы по адресу: Exchange Server, Exchange Online или Exchange Online Protection.

Использование сценария Prepare-MoveRequest.ps1 для подготовки почтовых ящиков к перемещениям между лесами

Запустите скрипт из командной консоли Exchange на сервере почтовых ящиков в целевом лесу Exchange 2016 или Exchange 2019. Сценарий выполнит копирование атрибутов почтового ящика из исходного леса.

Чтобы назначить определенные учетные данные проверки подлинности для удаленного контроллера домена леса, необходимо сначала запустить командлет Windows PowerShell Get-Credential и сохранить входные данные пользователя во временной переменной. При выполнении командлета Get-Credential он запрашивает имя пользователя и пароль учетной записи, используемой при проверке подлинности на контроллере домена удаленного леса. Затем можно использовать временную переменную в сценарии Prepare-MoveRequest.ps1. Дополнительные сведения о командлете Get-Credential см. в разделе Get-Credential.

Примечание.

Убедитесь, что при вызове этого сценария для локального и удаленного лесов используются различные учетные данные.

  1. Выполните следующие команды, чтобы получить учетные данные локального и удаленного лесов.

    $LocalCredentials = Get-Credential
    
    $RemoteCredentials = Get-Credential
    
  2. Выполните следующие команды, чтобы передать эти учетные данные в параметры LocalForestCredential и RemoteForestCredential в скрипте Prepare-MoveRequest.ps1.

    Prepare-MoveRequest.ps1 -Identity JohnSmith@Fabrikan.com -RemoteForestDomainController DC001.Fabrikam.com -RemoteForestCredential $RemoteCredentials -LocalForestDomainController DC001.Contoso.com -LocalForestCredential $LocalCredentials
    

Набор параметров скрипта

В следующей таблице указан набор параметров для этого сценария.

Параметр Обязательный Описание
Identity Обязательный Параметр Identity однозначно определяет почтовый ящик в исходном лесу. Идентификатор может быть любым из следующих значений: общее имя (CN), псевдоним, свойство proxyAddress , свойство objectGuid или свойство DisplayName .
RemoteForestCredential Обязательный Параметр RemoteForestCredential указывает администратора, который имеет разрешения на копирование данных из исходного леса Active Directory.
RemoteForestDomainController Обязательный Параметр RemoteForestDomainController указывает контроллер домена в исходном лесу, где находится почтовый ящик.
DisableEmailAddressPolicy Необязательный Параметр DisableEmailAddressPolicy указывает, следует ли отключить политику адресов Email (EAP) при создании объекта MailUser в целевом лесу.
При указании этого параметра политика адресов электронной почты не будет применяться в целевом лесу.
Примечание. При указании этого параметра объект MailUser не будет иметь сопоставления адресов электронной почты в локальном домене леса. Обычно он отмечается с помощью политики адресов электронной почты.
LinkedMailUser Необязательный Параметр LinkedMailUser указывает, следует ли создать связанный MailUser в локальном лесу для пользователя почтового ящика в удаленном лесу.
При указании этого параметра согласно сценарию создается целевой объект MailUser, связанный с исходным почтовым ящиком. Если этот параметр не указан, то по сценарию создается обычный целевой объект MailUser.
LocalForestCredential Необязательный Параметр LocalForestCredential указывает администратора с разрешениями на запись данных в целевой лес Active Directory.
Рекомендуется указать этот параметр явным образом, чтобы избежать проблем с разрешениями Active Directory.
Если в удаленном и локальном лесах настроено отношение доверия, не используйте учетную запись пользователя из удаленного леса в качестве учетных данных локального леса, даже если учетная запись удаленного пользователя имеет разрешение на изменение службы каталогов Active Directory в локальном лесу.
LocalForestDomainController Необязательный Параметр LocalForestDomainController указывает контроллер домена в целевом лесу, где будет создан почтовый пользователь.
Рекомендуется указать этот параметр, чтобы избежать возможных проблем с задержкой репликации контроллера домена в локальном лесу, которые могут произойти при выборе случайного контроллера домена.
MailboxDeliveryDomain Необязательный Параметр MailboxDeliveryDomain указывает полномочный домен исходного леса, чтобы скрипт смог выбрать правильное свойство proxyAddress пользователя исходного почтового ящика в качестве свойства targetAddress целевого почтового ящика пользователя.
По умолчанию основной SMTP-адрес пользователя исходного почтового ящика устанавливается в качестве свойства targetAddress целевого почтового пользователя.
OverWriteLocalObject Необязательный Параметр OverWriteLocalObject используется для пользователей, созданных средством миграции Active Directory. При этом свойства существующего почтового контакта копируются для нового почтового пользователя. После этого сценарий также копирует для нового почтового пользователя свойства пользователя исходного леса.
TargetMailUserOU Необязательный Параметр TargetMailuserOU указывает подразделение, в котором будет создан целевой почтовый пользователь.
UseLocalObject Необязательный Параметр UseLocalObject указывает, следует ли преобразовать существующий локальный объект в требуемого целевого почтового пользователя, если скрипт обнаруживает объект в локальном лесу, конфликтующий с создаваемым пользователем почты.

Примеры

В этом разделе приведено несколько примеров возможного использования сценария Prepare-MoveRequest.ps1.

Пример. Один связанный почтовый пользователь

В этом примере подготавливается один связанный почтовый пользователь в локальном лесу при наличии доверия между удаленным лесом и локальным лесом.

  1. Выполните следующие команды, чтобы получить учетные данные локального и удаленного лесов.

    $LocalCredentials = Get-Credential
    
    $RemoteCredentials = Get-Credential
    
  2. Выполните следующую команду, чтобы передать эти учетные данные в параметры LocalForestCredential и RemoteForestCredential в скрипте Prepare-MoveRequest.ps1.

    Prepare-MoveRequest.ps1 -Identity JamesAlvord@Contoso.com -RemoteForestDomainController DC001.Fabrikam.com -RemoteForestCredential $RemoteCredentials -LocalForestDomainController DC001.Contoso.com -LocalForestCredential $LocalCredentials -LinkedMailUser
    

Пример. Конвейеризация

В этом примере иллюстрируется поддержка конвейерного режима при указании списка идентификаторов почтового ящика.

  1. Выполните следующую команду.

    $UserCredentials = Get-Credential
    
  2. Выполните следующую команду, чтобы передать учетные данные в параметр RemoteForestCredential в скрипте Prepare-MoveRequest.ps1.

    "IanP@Contoso.com", "JoeAn@Contoso.com" | Prepare-MoveRequest.ps1 -RemoteForestDomainController DC001.Fabrikam.com -RemoteForestCredential $UserCredentials
    

Пример. Использование файла .csv для массового создания пользователей почты

Вы можете создать файл .csv, содержащий список удостоверений почтовых ящиков из исходного леса, что позволяет передать содержимое этого файла в скрипт для массового создания целевых пользователей почты.

Например, CSV-файл может иметь следующее содержимое:

Identity
Ian@contoso.com
John@contoso.com
Cindy@contoso.com

В этом примере вызывается файл .csv для массового создания целевых почтовых пользователей.

  1. Выполните следующую команду, чтобы получить учетные данные леса.

    $UserCredentials = Get-Credential
    
  2. Выполните следующую команду, чтобы передать эти учетные данные в параметр RemoteForestCredential в сценарии Prepare-MoveRequest.ps1.

    Import-Csv Test.csv | Prepare-MoveRequest.ps1 -RemoteForestDomainController DC001.Fabrikam.com -RemoteForestCredential $UserCredentials
    

Поведение скрипта в зависимости от конечного объекта

В этом разделе описывается выполнение скрипта по отношению к нескольким сценариям для конечных объектов.

Дублирование целевого объекта с включенной поддержкой почты

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

  • Если атрибут masterAccountSid пользователя исходного почтового ящика соответствует какому-либо атрибуту objectSid или masterAccountSid целевого объекта, то:

    • Если для целевого объекта не включена почта, скрипт возвращает ошибку, так как скрипт не поддерживает преобразование объекта, который не поддерживает почту, в почтовый пользователь.

    • Если для целевого объекта включена поддержка почты, он является дубликатом.

  • Если адрес в свойствах proxyAddress (только smtp/x500) пользователя исходного почтового ящика соответствует адресу в свойствах proxyAddress (только smtp/x500) целевого объекта, то целевой объект является дубликатом.

Сценарий запрашивает пользователя о дубликатах объектов.

Если целевой объект с поддержкой почты является почтовым пользователем или почтовым контактом, который, скорее всего, создается при развертывании синхронизации глобального списка адресов между лесами, можно снова запустить скрипт с параметром UseLocalObject , чтобы использовать целевой объект с поддержкой почты для миграции почтовых ящиков.

Пользователь почты

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

  • msExchMailboxGUID

  • msExchArchiveGUID

  • msExchArchiveName

Если задан параметр LinkedMailUser , скрипт копирует атрибут source objectSid / masterAccountSid .

Почтовый контакт

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

  • msExchMailboxGUID

  • msExchArchiveGUID

  • msExchArchiveName

  • Samaccountname

  • userAccountControl (задано значение 514; эквивалент )0x202, ACCOUNTDISABLE | NORMAL_ACCOUNT

  • userPrincipalName.

Если задан параметр LinkedMailUser , скрипт копирует атрибут source objectSid / masterAccountSid .

Атрибут LegacyExchangeDN

При вызове командлета Update-Recipient для преобразования целевого объекта в почтового пользователя для целевого почтового пользователя создается новый атрибут LegacyExchangeDN . Скрипт копирует атрибут LegacyExchangeDN целевого почтового пользователя в качестве адреса x500 в свойства proxyAddress исходного пользователя почтового ящика.