Адміністратор Exchange може переміщати ящики користувачів між поштовими базами на одному сервері або між віддаленими mailbox серверами. У цій статті ми розглянемо, як переміщати поштові скриньки в Exchange за допомогою Exchange Admin Center і PowerShell (стаття актуальна для всіх підтримуваних версій 2010/2013/2016/2019, з невеликими застереженнями щодо графічного інтерфейсу керування Exchange).
Найчастіше ящики в організації Exchange переміщують, якщо користувач перемістився на інший майданчик з власними поштовими півночі; коли закінчується місце на диску, де зберігається поточна база; коли потрібно виконати офлайн дефрагментацію бази без переривання поштового сервісу для користувачів.
Для перенесення поштової скриньки з однієї бази в іншу, потрібно створити запит на переміщення. Є три типи запиту на переміщення:
- Місцевий переїзд – локальний запит на перенесення ящика всередині одного лісу (з однієї бази в іншу на тому ж самому поштовому сервері, або на інший сервер в цій же організації Exchange);
- Переїзд міжлісового підприємства – перенесення поштових скриньок між різними лісами Active Directory;
- Remote mailbox moves in hybrid deployments – перенесення поштових скриньок в гібридних конфігураціях (між локальна біржа та Office 365).
Переміщення поштових скриньок за допомогою Exchange Admin Center
За допомогою Центр адміністрування Exchange ви можете перемістити один або кілька скриньок користувачів.
- Відкрийте EAC і перейдіть на вкладку Одержувачі -> Міграції;
- Натисніть кнопку + і виберіть пункт Перейти до іншої бази даних;
- Виберіть облікові записи, ящики яких потрібно перемістити;
Можна вказати список користувачів для перенесення в CSV файлі і завантажити його в EAC.
- Потім потрібно вказати цільову поштову базу, в яку потрібно перемістити ящики;
- Далі ви можете вказати, чи потрібно запустити переміщення відразу, або пізніше, а також вказати адресу, з якої потрібно доставити звіт про успішне переміщення ящика.
Я сам практично не користуюся можливостями переміщення ящиків через EAC, тому що за допомогою PowerShell можна виконати ці дії набагато зручніше і швидше.
Управління переміщенням скриньок Exchange за допомогою PowerShell
Щоб дізнатися, в який поштової базі знаходиться ящик користувача, запустіть Exchange Management Shell і виконайте команду:
Get-Mailbox aaivanov| Format-List Database
У цьому прикладі скриньку користувача знаходиться в базі DB01.
Для створення локального запиту на перенесення ящика використовується командлет New-MoveRequest. наприклад:
New-MoveRequest -Identity aaivanov -TargetDatabase "MBX01" –BadItemLimit 10
Крім імені користувача важливі параметри це:
- TargetDatabase – ім’я цільової поштової бази, в яку потрібно перемістити ящик;
- BadItemLimit – кількість пошкоджених елементів в ящику, яке можна пропустити (ігнорувати) при перенесенні ящику.
Якщо вказати BadItemLimit 0, значить при наявності хоча б одного пошкодженого елемента, скриньку не буде переміщений і залишиться в вихідній базі. Якщо ви вказали значення BadItemLimit > 50, потрібно додатково вказувати ключ AcceptLargeDataLoss.
Командлет поверне розмір ящика і архіву (TotalMailboxSize, TotalArchiveSize) і повідомлення про те, що запит на перенесення доданий в чергу (Queued)
Для перенесення всіх ящиків з однієї поштової бази Exchange в іншу, використовуйте команду:
Get-Mailbox -Database DB01 -ResultSize Unlimited | New-MoveRequest -TargetDatabase DB02
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-MoveRequest | Get-MoveRequestStatistics
Після того, як перенесення завершено, значення PercentComplete досягне 100, а статус перенесення зміниться на 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 можна переміщати кілька ящиків з допомогою пакетного режиму (командлет Новий пакет міграції). Список ящиків для міграції потрібно вказати в CSV файлі, а потім виконати команду:
New-MigrationBatch -Local -AutoStart -AutoComplete -Name DB01Move20200915 -CSVData ([System.IO.File]::ReadAllBytes("C:PSDB01Move20200915.csv")) -TargetDatabases DB02 -BadItemLimit 10
Для перенесення тільки основного ящика вкажіть параметр PrimaryOnly
, Щоб перенести архівний поштову скриньку – ArchiveOnly
.