Скрипт для переміщення поштових скриньок між базами.
Виникла задача смігріровать все поштові скриньки з однієї бази в іншу. Завдання просте і, на перший погляд, елементарно вирішується за допомогою командлета New-MoveRequest.
Так для перевозу всіх ящиків з бази DB1 в базу DB2 досить виконати пару команд:
$ mailboxes = Get-Mailbox -Database DB1
foreach ($ mailbox in $ mailboxes) {New-MoveRequest -Identity $ Mailbox -TargetDatabase DB2}
При такому підході всі ящики одночасно ставляться в чергу і їдуть в нову базу в кілька потоків.В принципі цілком робочий сценарій, але в моєму випадку для одночасної міграції не вистачило продуктивності дискової підсистеми і в результаті міграція просто встала.
При цьому по одному ящику все прекрасно переїжджало, однак возити кілька сот ящиків вручну не дуже зручно .Отже треба зробити так, щоб ящики переїжджали по черзі, але в автоматичному режимі. В результаті вийшов ось такий скриптик:
$ mailboxes = Get-Mailbox -Database DB1;
foreach ($ mailbox in $ mailboxes) {
New-MoveRequest -Identity $ mailbox -TargetDatabase DB2;
while ($ (Get-MoveRequest -Identity $ mailbox.alias) .status -ne "completed") {
Start-Sleep 60;
Get-MoverequestStatistics -Identity $ mailbox.alias
}
}
Можливо не саме витончене рішення, але в моєму випадку працює. Ящики хоч і не дуже швидко, але їдуть.
Актуально для Exchange Server 2010 і новіших версій.
.