PowerShell позволяет значительно автоматизировать обслуживание системы Exchange и AD. В данной статье я привел несколько скриптов, здорово пригодившихся мне при выполнении некоторых задач.
Сразу хочу поблагодарить Василия Гусева за его блог, а также всех, кто помог мне разобраться с PowerShell вообще и своими примерами сподвигшими к написанию данных скриптов в частности.
Для удобства работы с AD я использовал командлеты компании Quest Software, они бесплатны для использования и доступны для скачивания здесь -
ActiveRoles Management Shell for Active Directory 32-bit
ActiveRoles Management Shell for Active Directory 64-bit
После установки рекомендую выполнить в Exchange Management Shell команду, позволяющую прикрепить оснастку Quest Software к профилю EMS:
Add-PSSnapin Quest.ActiveRoles.ADManagement
Exchange 2007
Первый, и в то же время самый полезный для меня скрипт выполняет экспорт почтовых ящиков отключенных пользователей с дальнейшим отключением почтового ящика и очисткой базы. Рассмотрим более подробно:
#Получаем список отключенных пользователей с русскими именами
Get-QADUser -Disabled -name [А-Я]* -IncludedProperties samaccountname, email |
#Предоставляем администратору Exchange права на почтовые ящики выбранных пользователей
ForEach-Object {(Add-MailboxPermission $_.samaccountname -User "domain\ExchangeAdmin" -AccessRights FullAccess) |
#Производим экспорт почтовых ящиков
ForEach-Object (Export-Mailbox $_.email -PSTFolderPath D:\КУДА_БУДЕТ_ЭКСПОРТИРОВАТЬСЯ\ –Confirm:$false) |
#Отключаем почтовые ящики
ForEach-Object (Disable-Mailbox $_.email –Confirm:$false) }
#Чистим базу
Get-Mailboxdatabase | Clean-MailboxDatabase
Обращаю ваше внимание, что запуск данного скрипта возможен только с удаленной рабочей станции под управление 32-bit ОС и с установленной консолью Exchange Management Shell. Дополнительно используется параметр –Confirm:$false выключающий запрос подтверждения при экспорте и отключении почтового ящика, если вы хотите контролировать весь процесс, удалите этот параметр.
Получение списка 20 самых больших почтовых ящиков:
Get-MailboxStatistics -Server "ИМЯ_ПОЧТОВОГО_СЕРВЕРА" | sort TotalItemSize -desc |
ft "displayname", "ItemCount", "TotalItemSize" | select -First 20
Можно убрать последнюю часть конвейра (| select -First 20) и получить размер всех почтовых ящиков на сервере. Размер выводится в байтах, что не очень удобно для восприятия, но я, к сожалению, не смог найти решения для трансформации размера в Мб или Гб. Буду признателен, если кто подскажет.
Далее, зачастую возникают ситуации, когда необходимо удалить из почтовых ящиков пользователей ошибочно посланное письмо или просочившийся спам с вирусом. Сделать это достаточно просто:
Get-Mailbox -Database ИМЯ_БАЗЫ | Export-Mailbox -SubjectKeywords "КЛЮЧЕВЫЕ_СЛОВА_В_ТЕМЕ_ПИСЬМА" -DeleteContent
Для получения списка баз почтового сервера, пишем просто:
Get-MailboxDatabase
если же вы хотите получить количество почтовых ящиков, имеющихся в каждой из баз, используйте следующий скрипт:
Get-MailboxDatabase |
Select Server, StorageGroupName, Name, @{Name="Количество почтовых ящиков";
expression={(Get-Mailbox -Database $_.Identity |
Measure-Object).Count}} | Sort -Property Name | Format-Table -AutoSize
Active Directory
Часто бывает, что когда начинаешь заниматься обслуживанием AD, обнаруживается большое количество устаревших учетных записей компьютеров и пользователей. Приведенные ниже скрипты позволят выявить такие учетки.
Находим и удаляем учетные записи компьютеров, не обращавшихся к AD последние 4 месяца
Get-QADComputer -IncludedProperties pwdLastSet | ft Name, pwdLastSet
$LastLogonDate = (Get-Date).AddMonths(-4)
Get-QADComputer -IncludedProperties pwdLastSet | where { $_.pwdLastSet -le $LastLogonDate } | Remove-QADObject
Находим учетные записи пользователей, имя которых начинается с любой буквы русского алфавита и которые не заходили в домен более полгода:
$logondate = (Get-Date).AddMonths(-6)
Get-QADUser -name [А-Я]* -IncludedProperties lastLogon | where { $_.lastLogon -le $logondate } | Select DisplayName, lastLogon
При первом запуске скриптов будет не лишним использовать параметр -whatif в конце конвейра, это позволит протестировать выполнение задачи без применения изменений.
Все приведенные в статье скрипты здорово помогли мне при обслуживании AD и Exchange, надеюсь пригодятся и вам



Комментарии
Оставить комментарий Оповещения с других блогов