01 июня 2010

Microsoft Exchange 2010 Extension agents

Есть хорошая поговорка (или пословица :), но не суть важно): "Век живи, век учись!"
Читая сегодня свою подборку RSS каналов наткнулся на интересную статью. Оригинал тут.

Очень советую к прочтению, кому не лень читать на анГельском. А для тех кто все таки ленится, излагаю краткую суть новой future Microsoft Exchange 2010.

Итак, я думаю самая востребованная задача, после создания почтового ящика для пользователя, отправка на этот ящик так называемого - welcome letter. Раньше она могла решаться несколькими способами:
1. отправка письма вручную
2. отправка письма с помошью скрипта. Однако этот пункт при довольно большом размере AD подгружал на время своего выполнения машину на которой выполнялся шедулер. Так как алгоритм скрипта был у всех приблизительно одинаковый. Все ящики в БД > получение текущих ящиков > сравнение с текущей БД > выборка отличий > отсылка писем в новые почтовые ящики > перезапись БД. Соответственно выставлялась необходимая частота запуска этого скрипта. Т.о. у меня подобная нагрузка происходила каждые 4 часа.

Так вот. Теперь есть решение!
Достаточно написать своего "агента" который бы выполнял указанную нами команду ДО или ПОСЛЕ выполнения любого, опять таки указанного нами, CMDLET'a Microsoft Exchange 2010.
Т.е. выполнили мы например команду new-mailbox, и в случае ее удачного завершения выполнилась команда отправки welcome letter. Или например, вы вызвали из консоли удаление почтового ящика пользователя, однако предварительно создается резервная копия этого почтового ящика в PST.
Сценарии использования агентов на самом деле огромное количество. Каждый может придумать как минимум одно :).

Теперь о том как реализовать подобные полезности:
1. создадим файлик ScriptingAgentConfig.xml в папке \Bin\CmdletExtensionAgents, по умолчанию она C:\Program Files\Microsoft\Exchange Server\V14\Bin\CmdletExtensionAgents
2. Я возьму тот же пример, что у автора английского поста - отключение IMAP у почтового ящика после его создания. Для этого в созданный файл ScriptingAgentConfig.xml вставьте следующий код:






if($succeeded) {
$newmailbox = $provisioningHandler.UserSpecifiedParameters["Name"]
set-casmailbox $newmailbox -ImapEnabled $false
}




Пояснения по файлу:



стандартные разметка XML.
...
- здесь указываем имя свое функции например MailboxProvisioning и cmdlet триггер по которому эта функция должна срабатывать.
...
- собственно говорит о том когда должна срабатывать наша функция. Если она должна отработать ДО выполнения команды, тогда необходимо воспользоваться конструкцией
...
А в самой функции идут неоходимые нам команды:
    $newmailbox = $provisioningHandler.UserSpecifiedParameters["Name"]
set-casmailbox $newmailbox -ImapEnabled $false

Первой мы получаем имя почтового ящика, а второй совершаем необходимые с ним действия.

Кстати, в папке \Bin\CmdletExtensionAgents есть отличный файл ScriptingAgentConfig.xml.sample с примером выходящим за рамки выполнения тех или иных действий после определенной команды. Советую присмотреться к нему.

Удачных Вам автоматизаций рабочих процессов!