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:
1 |
Add-PSSnapin Quest.ActiveRoles.ADManagement |
Exchange 2007
Первый, и в то же время самый полезный для меня скрипт выполняет экспорт почтовых ящиков отключенных пользователей с дальнейшим отключением почтового ящика и очисткой базы. Рассмотрим более подробно:
1 2 3 4 5 6 7 8 9 10 |
#Получаем список отключенных пользователей с русскими именами 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 самых больших почтовых ящиков:
1 2 |
Get-MailboxStatistics -Server "ИМЯ_ПОЧТОВОГО_СЕРВЕРА" | sort TotalItemSize -desc | ft "displayname", "ItemCount", "TotalItemSize" | select -First 20 |
Можно убрать последнюю часть конвейера (| select -First 20
) и получить размер всех почтовых ящиков на сервере. Размер выводится в байтах, что не очень удобно для восприятия, но я, к сожалению, не смог найти решения для трансформации размера в Мб или Гб. Буду признателен, если кто подскажет.
Далее, зачастую возникают ситуации, когда необходимо удалить из почтовых ящиков пользователей ошибочно посланное письмо или просочившийся спам с вирусом. Сделать это достаточно просто:
1 |
Get-Mailbox -Database ИМЯ_БАЗЫ | Export-Mailbox -SubjectKeywords "КЛЮЧЕВЫЕ_СЛОВА_В_ТЕМЕ_ПИСЬМА" -DeleteContent |
Для получения списка баз почтового сервера, пишем просто:
1 |
Get-MailboxDatabase |
если же вы хотите получить количество почтовых ящиков, имеющихся в каждой из баз, используйте следующий скрипт:
1 2 3 4 |
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 месяца
1 2 3 |
Get-QADComputer -IncludedProperties pwdLastSet | ft Name, pwdLastSet $LastLogonDate = (Get-Date).AddMonths(-4) Get-QADComputer -IncludedProperties pwdLastSet | where { $_.pwdLastSet -le $LastLogonDate } | Remove-QADObject |
Находим учетные записи пользователей, имя которых начинается с любой буквы русского алфавита и которые не заходили в домен более полгода:
1 2 |
$logondate = (Get-Date).AddMonths(-6) Get-QADUser -name [А-Я]* -IncludedProperties lastLogon | where { $_.lastLogon -le $logondate } | Select DisplayName, lastLogon |
При первом запуске скриптов будет не лишним использовать параметр -whatif
в конце конвейра, это позволит протестировать выполнение задачи без применения изменений.
Все приведенные в статье скрипты здорово помогли мне при обслуживании AD и Exchange, надеюсь пригодятся и вам 🙂
Я бы не назвал приведенные вами примеры скриптами. Чисто технически они ими безусловно являются, но на практике это 3-4 строчки кода. А в скрипты обычно выделяют большие и/или сложные блоки кода.
А по поводу вот этого:
“Размер выводится в байтах, что не очень удобно для восприятия, но я, к сожалению, не смог найти решения для трансформации размера в Мб или Гб.”
Так нет ничего проще, скорее всего я ошибусь в синтаксисе, потому что не помню точно, просто когда-то попробовал, получилось, но больше не делал, но вообще смысл такой: при выводе данных создете ассоциативный массив
{$_.TotalItemSize, $_.TotalItemSize/Mb}
ну или /Gb если нужно получить размер в Гигабайтах
Синтаксис создания такой конструкции уточните в справке.
Немного поколдовал
Get-MailboxStatistics -Server “serv06″ | select displayname, ItemCount, @{Name=”TotalItemSize”;expression={$_.TotalItemSize/1Mb}} | sort TotalItemSize -desc | select -First 20
Наслаждайтесь, размер выводится в Мегабайтах, для Гигабайт соответственно делителем подставить /1Gb
По поводу скриптов вы конечно правы, но язык не повернулся назвать их по другому 🙂 Большое спасибо за способ перевода в Гб, буду знать!
Сколько у вас сайтов в AD? Если больше одного и там есть контроллеры, то у вас есть шанс грохнуть живые компьютеры. Прямо сейчас не скажу, но не уверен, что pwdLastSet реплицируемый параметр
Вы ошибаетесь. Данный параметр реплицируется, иначе компьютер смог бы заходить только на один контроллер домена, на котором он сменил пароль. Не реплицируется параметр LastLogon.
Уведомление:Получение информации о времени последней регистрации пользователя в домене | Kvazar`s Blog
подскажите, как скорректировать скрипт чтобы удалить из АД информацию lastlogon
Уведомление:Получение информации о времени последней регистрации пользователя в домене ( last logon)
Уведомление:Получение информации о времени последней регистрации пользователя в домене ( last logon)