Exchange manage mailboxes
Ищем всех отключенных пользователей в AD, имеющих почтовый ящик
Get-ADUser -LDAPFilter "(mail=*)" -SearchBase "DC=example,DC=com" | Where-Object {$_.Enabled -eq $false}
Нюанс команды, что на вывод попадают служебные ящики. У меня отключенные учётки собраны в отдельной OU и при поиске в ней проблемы с сервисными ящиками нет.
Создаём запросы на экспорт ящиков отключённых пользователей в PST-файлы
foreach ($i in (Get-ADUser -LDAPFilter "(mail=*)" -SearchBase "DC=example,DC=com" | Where-Object {$_.Enabled -eq $false})) { New-MailboxExportRequest -Mailbox $($i.samaccountname) -BadItemLimit 100000 -FilePath "\\Exports\$($i.samaccountname).pst" }
Нюанс в том, что экспорт можно делать только на шару и только на другой сервер. BadItemLimit указываем, чтобы экспорт не прерывался при накоплении ошибок
Посмотреть процесс экспорта можно так
Get-MailboxExportRequest
или более подробно так
Get-MailboxExportRequest | Get-MailboxExportRequestStatistics
Отключаем ящики, которые были успешно экспортированы
Get-MailboxExportRequest -Status Completed | % {$_.FilePath.Substring(14,$_.FilePath.length-14-4)} | Disable-Mailbox -Confirm:$false
Цифра 14 подбирается индивидуально - это количество обрезаемых символов в строке полного пути для PST-файлов. 4 скорее всего будет для всех одинаково, т.к. это обрезается расширение ".pst")
Для примера - путь к файлу \\server.example.com\shara\folder\user.pst
. Тогда требуется обрезать первые 34 символа.
Удаляем успешно выполненные задачи по экспорту
Get-MailboxExportRequest -status Completed | Remove-MailboxExportRequest -Confirm:$false
Проверяем что осталось
Get-MailboxExportRequest
И ищем причины ошибок.
Ну и просто удалить ящики
foreach ($i in (Get-ADUser -LDAPFilter "(mail=*)" -SearchBase "DC=example,DC=com" | Where-Object {$_.Enabled -eq $false})) { Disable-Mailbox -identity $($i.samaccountname) -confirm:$false}
Несколько полезных команд
Статистика по папкам в ящике пользователя с сортировкой по размеру.
Get-MailboxFolderStatistics -Identity username | Sort-Object FolderSize -Descending | ft Name,FolderPath,FolderSize,FolderAndSubfolderSize -autosize
Размер всех почтовых ящиков с сортировкой
Get-MailboxStatistics -Server server | Sort-Object TotalItemSize -Descending | ft Displayname,Totalitemsize
Размер почтовых баз
Get-MailboxDatabase -Status | ft name,databasesize, availablenewmailboxspace -AutoSize