пятница, 1 апреля 2011 г.

Поиск неактивных пользователей и их почтовых ящиков

clip_image002Недавно возникла задача найти в 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

Анонимный комментирует...

Вот у меня есть ящик в который я не входил наверно пол года, вы не знаете как его можно удалить с базы данных майл.ру что бы заново зарегать ящик?
Мой ящик шяс в стадии блокировки за "долгое не использывание"но его должны были удалить,но почему то не удалили.ПОмогите что ли как то(

Алексей Богомолов (Alexx) комментирует...

на тему почтовой системы 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 пользователи указаны русскими буквами, то в полученном файле мы увидим - "Њ аЁп ”ЁйҐў "
"Њ аЁ­  ‹®бҐў "

Алексей Богомолов (Alexx) комментирует...

Это проблема со шрифтами. Нажмите правой кнопкой на заголовке окна EMS - Properties - Font - выберите рифт со значком ТТ (TrueType)

Анонимный комментирует...

вы что кулц хакиры о.о

Forvator комментирует...

Спасибо, очень полезная статья.

Анонимный комментирует...

Спасибо, получилось хорошо.
Однако пока не пойму, что делать, если домен состоит из леса, где 5 саб доменов.
Запрос отсылаются на ДЦ, где нет учеток.

- изначально я выгрузил из всех доменов и поддоменов учетки.

Отправить комментарий