Еще Один Сценарий Обмена (Перемещение Почтовых Ящиков) Exchange Server

 Этот скрипт я создал по следующим причинам:

1. База данных почтовых ящиков заполнялась
2. Хотел взять заполненную базу данных и разделить их на две разные базы данных.

Скрипт отсортирует все почтовые ящики по размеру и возьмет 40% самых больших почтовых ящиков и переместит их в указанную базу данных, а оставшиеся 60% - в другую базу данных.

Если вы не хотите указывать точное имя базы данных и просто хотите, чтобы PowerShell использовал часть указанного имени для поиска соответствующей базы данных, вы можете изменить часть, в которой указано {$_.Name-eq $sourceDB}, на have-like вместо-eq. Сделайте то же самое для следующих двух частей кода: {$_.Name-eq $targetDBLarge} и {$_.Name-eq $targetDBSmall}. - эквалайзер нуждается в точном совпадении для имени базы данных и-like в основном берет имя базы данных и помещает вокруг него дикие карты, так что это больше похоже на *databaseyouspecify*, а затем находит соответствующую базу данных, которая похожа на указанное вами имя.

Важно: я добавил-whatif переключается на команды перемещения почтового ящика ниже, чтобы быть более безопасным. Чтобы действительно переместить почтовые ящики, вам нужно будет удалить-whatif. И как всегда, убедитесь, что вы протестировали это в лаборатории, прежде чем запускать его в продакшен, а также сделали хорошую резервную копию AD/EXCHANGE/ETC!

$sourceDB = "Specify your Source Database Here"
$targetDBLarge = "Specify your larger database in which 40% of the largest mailboxes will be moved to"
$targetDBSmall = "Specify your smaller database in which the remaining 60% of the smaller mailboxes will be moved to"

############################################
####### Don't modify below this line #######
############################################

$a = Get-MailboxStatistics -Database $(Get-Mailboxdatabase | Where-Object {$_.Name -eq $sourceDB}) | where {$_.ObjectClass -NotMatch '(SystemAttendantMailbox|ExOleDbSystemMailbox)'} | Sort-Object Totalitemsize

$rounded = [math]::round($a.count * .4)
$first = $rounded
$last = $a.count - $first

$a | Select-object -First $first | Move-Mailbox -TargetDatabase $(Get-Mailboxdatabase | Where-Object {$_.Name -eq $targetDBLarge}) -whatif
$a | Select-object -Last $last | Move-Mailbox -TargetDatabase $(Get-Mailboxdatabase | Where-Object {$_.Name -eq $targetDBSmall}) -whatif