Проблема старых учетных записей, часть вторая


Итак, на предыдущем несложном этапе мы определили давно неиспользуемые учетные записи и переместили их в отдельный контейнер.
Теперь нам необходимо решить вторую часть задачи, связанную с отображением уволенных пользователей в общей адресной книге почтовой системы и, собственно, наличием актуальности в самом существовании их ящиков внутри почтового хранилища.

Для начала, получим список всех существующих почтовых ящиков для перемещенных пользователей. Для этого запустим Exchange Management Shell (PowerShell) и выполним простенькую команду:
get-mailbox -organizationalUnit «libertine.su/Disabled Users»

По сути, нам это не дало ничего нового. Кроме того, что всего лишь перенаправив вывод данной команды на вход следующей, мы можем моментально решить вопрос с адресной книгой.
get-mailbox -organizationalUnit «libertine.su/Disabled Users» | set-Mailbox HiddenFromAddressListsEnabled:$true
Все, мы только что отключили отображение в адресной книге имен всех пользователей, перемещенных в OU Disabled Users.

Теперь осталось понять, можем ли мы как-то сократить количество ящиков, занимающих место в почтовом хранилище.
Но для начала, выведем список всех учетных записей, имеющих доступ к ящикам в заданном контейнере:
get-mailbox -organizationalUnit «libertine.su/Disabled Users» | Get-MailboxPermission | Format-List
Предупреждаю, на выходе будет очень длинная простыня 😉 Поэтому, вывод целесообразно было бы перенаправить в тестовый файл и далее работать уже с ним.

Поскольку нам нет резона тратить массу времени на тщательную вычитку доступов для каждого ящика, целесообразно выбрать любой и на его основе написать фильтр, существенно облегчающий дальнейшие задачи. Нам необходимо для каждого ящика получить список доступа, исключая доступ администраторов, серверов и самого титульного пользователя. Конечный сценарий может выглядеть примерно следующим образом:
get-mailbox -organizationalUnit «libertine.su/Disabled Users» | Get-MailboxPermission | Where {($_.user -notlike «LIBERTINE\admin») -and ($_.user -notlike «LIBERTINE\Exchange View-Only Administrators») -and ($_.user -notlike «LIBERTINE\Exchange Organization Administrators») -and ($_.user -notlike «LIBERTINE\Exchange Servers») -and ($_.user -notlike «LIBERTINE\Exchange Domain Servers») -and ($_.user -notlike «LIBERTINE\Exchange Services») -and ($_.user -notlike «LIBERTINE\Exchange Public Folder Administrators») -and ($_.user -notlike «NT AUTHORITY\NETWORK SERVICE») -and ($_.user -notlike «LIBERTINE\Exchange Organization Administrators») -and ($_.user -notlike «LIBERTINE\Domain Admins») -and ($_.user -notlike «LIBERTINE\Enterprise Admins») -and ($_.user -notlike «LIBERTINE\SECLMAIL$») -and ($_.user -notlike «LIBERTINE\FRSTCLMAIL$») -and ($_.user -notlike «NT AUTHORITY\SELF») -and ($_.user -notlike «LIBERTINE\superoot»)} | Format-List Identity, user

Замечательно, факт наличия доступа мы определили. Но пользуются ли им? Для этого введем дополнительное условие отбора: определим ящики, в которые не смотрели последние 70 дней (но смотрели когда-либо вообще).
get-mailbox -organizationalUnit «libertine.su/Disabled Users» | Get-MailboxStatistics | Where {($_.LastLogonTime -lt (get-date).adddays(-70)) -and ($_.LastLogonTime -gt (get-date).adddays(-900))}| Get-MailboxPermission | …

Впринципе, для завершения расследования происходящего, осталось лишь определить ящики, с которых стоит пересылка корреспонденции. Разумеется, с выводом ящика и адрес для пересылки.
get-mailbox -organizationalUnit «libertine.su/Disabled Users» | Where {$_.ForwardingAddress -ne $null} | Format-List DisplayName,ForwardingAddress

Комбинируя вышеперечисленные команды, можно, например, легко вывести прямых кандидатов на превращение старого почтового ящика в дополнительный smtp адрес для ящика ныне работающего сотрудника. Кстати, в этом примере рекомендую обратить внимание на двойное использование команды get-mailbox:
get-mailbox -organizationalUnit «libertine.su/Disabled Users» | Where {$_.ForwardingAddress -ne $null} | Get-MailboxStatistics | Where {($_.LastLogonTime -lt (get-date).adddays(-70)) -and ($_.LastLogonTime -gt (get-date).adddays(-900))} | get-mailbox | Format-List DisplayName,ForwardingAddress

Да, и еще: старые ящики, даже если ими периодически пользуются, рекомендуется перенести в отдельную почтовую базу, т.к. это даст определенный выигрыш в скорости доступа для активных пользователей. После создания самой новой базы почтовых ящиков, остальное сделать несложно:
get-mailbox -organizationalUnit «libertine.su/Disabled Users» | Move-Mailbox -TargetDatabase «OldMailboxesDB»

Главное, при переносе помнить о том, что в Exchange 2007 процесс совершается от имени администратора путем последовательного копирования всех сообщений. То есть, время последнего доступа к ящику будет установлено в текущее.


Ваш отзыв