Недавно возникла задача найти в Active Directory пользователей, которые не проявляли активность более полу года, после чего из них нужно было вычленить тех, у которых есть почтовые ящики, и далее вывести информацию о размере этих ящиков в виде отчета. Делалось это с той целью, чтобы инициировать удаление неиспользуемых почтовых ящиков, и уменьшить размер баз данных.
Что касается просто поиска почтовых ящиков, в которые ни кто не логинился в течение определенного промежутка времени, то тут все довольно просто - командлет Get-MailboxStatistics и параметр LastLogonTime нам в этом помогут. Но в данном случае, нужно было не только найти неактивные ящики, а найти неактивных пользователей, и только потом уже их ящики. Предполагается, что если пользователь заходит в домен хотя бы раз в пол года, значит, он продолжает работать в компании, но не использует свой почтовый ящик. Если же логон в домен не осуществляется, следовательно, учетную запись пользователя просто забыли удалить при увольнении.
Решение
Для начала, нам нужно найти учетные записи в базе данных Active Directory, по которым не было логона последние 6 месяцев. Поможет нам в этом команда dsquery:
dsquery user -inactive 24 -o rdn -limit 1000 > d:\inactive.txt
где
- dsquery user – запрос на поиск пользователей;
- -inactive 24 – фильтруем пользователей не активных в течении 24 недель (6 мес.);
- -o rdn – указываем формат вывода имен (может принимать значения dn, rdn, upn, samid);
- -limit 1000 – указываем максимальное количество выводимых записей (у меня вывод не убрался в дефолтное значение, следовательно, пришлось руками указать большее);
- > d:\inactive.txt - сохраняем вывод в текстовый файл на диск.
Теперь у нас есть список неактивных пользователей, но только у части из них есть почтовые ящики, следовательно, нам нужно их найти и вывести по ним отчет. Сделаем это следующим образом:
Прочитаем значения из файла в массив $userlist. Тут есть один не очень удобный момент – если вы откроете файл inactive.txt , то заметите, что значения имен пользователей заключены в кавычки. В таком виде использовать далее список пользователей не возможно, необходимо руками удалить знаки кавычек, делается это в два клика через Блокнот при помощи функции Заменить. После того, как список пользователей очищен, можно двигаться далее и считать его в массив:
$userlist = Get-Content d:\inactive.txt
Далее в цикле обработаем массив $userlist
foreach ($user in $userlist)
{
Проверяем наличие почтового ящика у пользователя методом «в лоб» J
$Mailbox = get-mailbox -identity $user
Если ошибки нет, то записываем имя пользователя в другой текстовый файл, если есть, то просто двигаемся далее по массиву
if ($mailbox) {
$user >> d:\mailbox.txt
}}
Теперь у нас есть список неактивных пользователей с почтовыми ящиками, осталось только сделать по ним красивый отчет. Подробнее о том, как делать красивые HTML-отчеты вы можете почитать в одной из предыдущих статей, а здесь я предложу готовую команду:
Get-Content d:\mailbox.txt | Get-MailboxStatistics | ConvertTo-Html DisplayName,TotalItemSize,ItemCount > d:\inactive-mailbox.htm
Заключение
Сразу хочу сказать, что способ не уклюж и не очень удобен, но он работает! Не думаю, что стоит тратить много времени на «украшение» однократной задачи. Но, в любом случае, комментарии, предложения и критику я буду рад увидеть в комментах к статье.
9 комментариев:
Была похожая задача, получить отчет по не активным ящикам. Т.е необходимо было знать какие ящики не используется более четырех месяцев.
Get-MailboxStatistics -server ofc-ex-02 | where {$_.Lastlogontime -lt (get-date).AddDays(-120)} |ConvertTo-Html LastLoggedOnUserAccount,Lastgontime,Database > c:\MBST\MB.html
Вот у меня есть ящик в который я не входил наверно пол года, вы не знаете как его можно удалить с базы данных майл.ру что бы заново зарегать ящик?
Мой ящик шяс в стадии блокировки за "долгое не использывание"но его должны были удалить,но почему то не удалили.ПОмогите что ли как то(
на тему почтовой системы mail.ru лучше обратиться непосредственно в их службу технической поддержки - http://help.mail.ru/mail-help
Спасибо Алексей. Давно хотел провести чистку не используемых ящиков, но как-то не доходили руки до поиска нужных скриптов. Получил список в своей почтовой организации всего за пару минут, причем для меня важно было отсортировать в отчете список по размеру "мертвых" ящиков, добавив sort totalitemsize -descending в последнюю команду:
Get-Content d:\mailbox.txt | Get-MailboxStatistics | sort totalitemsize -descending | ConvertTo-Html DisplayName,TotalItemSize,ItemCount > d:\inactive-mailbox.htm
Если в AD пользователи указаны русскими буквами, то в полученном файле мы увидим - "Њ аЁп ”ЁйҐў "
"Њ аЁ ‹®бҐў "
Это проблема со шрифтами. Нажмите правой кнопкой на заголовке окна EMS - Properties - Font - выберите рифт со значком ТТ (TrueType)
вы что кулц хакиры о.о
Спасибо, очень полезная статья.
Спасибо, получилось хорошо.
Однако пока не пойму, что делать, если домен состоит из леса, где 5 саб доменов.
Запрос отсылаются на ДЦ, где нет учеток.
- изначально я выгрузил из всех доменов и поддоменов учетки.
Отправить комментарий