Перенос почтовых ящиков Exchange в другую базу

Администратор Exchange может перемещать ящики пользователей между почтовыми базами на одном сервере или между удалёнными mailbox серверами. В этой статье мы рассмотрим, как перемещать почтовые ящики в Exchange с помощью Exchange Admin Center и PowerShell (статья актуальна для всех поддерживаемых версий 2010/2013/2016/2019, с небольшими оговорками касательно графического интерфейса управления Exchange).

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

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

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

  • Local move – локальный запрос на перенос ящика внутри одного леса (из одной базы в другую на том же самом почтовом сервере, или на другой сервер в этой же организации Exchange);
  • Cross-forest enterprise move – перенос почтовых ящиков между разными лесами Active Directory;
  • Remote mailbox moves in hybrid deployments – перенос почтовых ящиков в гибридных конфигурациях (между on-premises Exchange и Office 365).

Перемещения почтовых ящиков с помощью Exchange Admin Center

С помощью Exchange Admin Center вы можете переместить один или несколько ящиков пользователей.

  1. Откройте EAC и перейдите на вкладку Recipients -> Migrations;
  2. Нажмите кнопку + и выберите пункт Move to a different database; Exchange Admin Center перемещение ящика
  3. Выберите учетные записи, ящики которых нужно переместить; выбор пользователей, чьи почтовые ящики нужно переместить
    Можно указать список пользователей для переноса в CSV файле и загрузить его в EAC.
  4. Затем нужно указать целевую почтовую базу, в которую нужно переместить ящики; указать целевую базау данных exchange, в которую нужно перенести ящики
  5. Далее вы можете указать, нужно ли запустить перемещение сразу, или позднее, а также указать ящик, на который нужно доставить отчет об успешном перемещении ящика. запус миграции ящиков exchange

Я сам практически не пользуюсь возможностями перемещения ящиков через EAC, т.к. с помощью PowerShell можно выполнить эти действия гораздо удобнее и быстрее.

Управление перемещением ящиков Exchange с помощью PowerShell

Чтобы узнать, в какой почтовой базе находится ящик пользователя, запустите Exchange Management Shell и выполните команду:

Get-Mailbox aaivanov| Format-List Database

Get-Mailbox Database - определить базу в которой находится ящик пользователя

В этом примере ящик пользователя находится в базе DB01.

Для создания локального запроса на перенос ящика используется командлет New-MoveRequest. Например:

New-MoveRequest -Identity aaivanov -TargetDatabase "MBX01" –BadItemLimit 10

Кроме имени пользователя важные параметры это:

  • TargetDatabase – имя целевой почтовой базы, в которую нужно переместить ящик;
  • BadItemLimit – количество поврежденных элементов в ящике, которое можно пропустить (игнорировать) при переносе ящике.
    Если указать BadItemLimit 0, значит при наличии хотя бы одного поврежденного элемента, ящик не будет перемещен и останется в исходной базе. Если вы указали значение BadItemLimit > 50, нужно дополнительно указывать ключ AcceptLargeDataLoss.

Командлет вернет размер ящика и архива (TotalMailboxSize , TotalArchiveSize) и сообщение о том, что запрос на перенос добавлен в очередь (Queued)

New-MoveReques TargetDatabase BadItemLimit

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

Get-Mailbox -Database DB01 -ResultSize Unlimited | New-MoveRequest -TargetDatabase DB02

Обратите внимание, что для переноса системных ящиков нужно использовать параметр Arbitration:

Get-Mailbox -Database DB01 -Arbitration | New-MoveRequest -TargetDatabase DB02

В конфигурационном файле MSExchangeMailboxReplication.exe.config (C:\Program Files\Microsoft\Exchange Server\V15\Bin) можно изменить настройки миграции ящиков. Например, вы можете указать сколько одновременных операций перемещения поддерживается для одной базы или сервера. Это параметры MaxActiveMovesPerSourceMDB, MaxActiveMovesPerTargetMDB, MaxActiveMovesPerSourceServer, MaxActiveMovesPerTargetServer.

В зависимости от размер ящика и местоположения целевого сервера, его перенос может занять длительное время. Для отслеживания статуса миграции почтового ящика в % используется командлет Get-MoveRequestStatistics.

Get-MoveRequestStatistics -Identity aaivanov

В данном примере статус переноса — InProgress, процент завершения (PercentComplete) – 26%.

Get-MoveRequestStatistics

Можно вывести статус всех запросов на перемещения ящиков в организации:

Get-MoveRequest | Get-MoveRequestStatistics

После того, как перенос завершен, значение PercentComplete достигнет 100, а статус переноса изменится на Completed.

Get-MoveRequest PercentComplete Completed

Можно вывести статистику только по незавершённым операциям переноса:

Get-MoveRequest | where {$_.status -ne "completed"} | Get-MoveRequestStatistics | ft -a displayname,status*,percent

Вывести все ящики в процессе перемещения или ожидания в очереди:

Get-MoveRequest -movestatus inprogress
Get-MoveRequest -movestatus queued

Если при переносе произошла ошибка, можно вывести ее командой:

Get-MoveRequest aaivanov | Get-MoveRequestStatistics | fl *failure*, message

Для получения подробной информации об ошибках миграции ящиков, используйте:

Get-MoveRequest -resultsize unlimited | Where-Object {$_.status -like “failed”} | Get-MoveRequestStatistics -IncludeReport | select DisplayName, Message, FailureType, FailureSide, FailureTimeStamp, *bad*, *large*, Report, Identity | fl

Если нужно отменить перемещение ящика, выполните:

Remove-MoveRequest -Identity aaivanov

Чтобы удалить успешно завершенные запросы на перемещение (без этого вы не сможете перенести этот ящик в следующий раз), выполните:

Get-MoveRequest -MoveStatus Completed | Remove-MoveRequest

Пакетный перенос ящиков в Exchange

Для более удобного отслеживания перемещения ящиков можно использовать параметр –BatchName. Например, чтобы перенести все ящики из одной почтовой базы в другую в пакетном режиме, выполните:

Get-Mailbox -Database DB01 | New-MoveRequest -TargetDatabase DB02 -BatchName DB01toDB02Move20200915

Теперь, чтобы получить статус миграции всех ящиков в этом пакете нужно указать его имя:

Get-MoveRequest -BatchName DB01toDB02Move20200915| Get-MoveRequestStatistics

Так вы сможете убедиться, что все ящики из вашего задания успешно перенесены.

Можно временно приостановить перенос почтовых ящиков:

Get-MoveRequest | ? {$_.Batchname –like “*DB01toDB02Move20200915”}|Set-MoveRequest –SuspendWhenReadytoCompleate

Или продолжить миграцию:

Get-MoveRequest | ? {$_.Batchname –like “*DB01toDB02Move20200915”|Resume-MoveRequest

В Exchange 2013, 2016, 2019 и Exchange Online можно перемещать несколько ящиков с помощью пакетного режима (командлет New-MigrationBatch). Список ящиков для миграции нужно указать в CSV файле, а затем выполнить команду:

New-MigrationBatch -Local -AutoStart -AutoComplete -Name DB01Move20200915 -CSVData ([System.IO.File]::ReadAllBytes("C:\PS\DB01Move20200915.csv")) -TargetDatabases DB02 -BadItemLimit 10

Для переноса только основного ящика укажите параметр PrimaryOnly, чтобы перенести архивный почтовый ящик – ArchiveOnly.

Предыдущая статья Следующая статья


Комментариев: 1 Оставить комментарий

Оставить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Я не робот( Обязательно отметьте)