Как стать автором
Обновить

Microsoft Exchange: приветственное письмо для новых сотрудников

Приходит в компанию новый человек, и сразу у него возникает множество вопросов по внутренним порядкам и устоям. Хорошо, если кадровая служба отвечает на них. Но чаще коллегам приходится рассказывать, как попасть на файловые серверы, где лежат бланки документов, какова процедура оформления отпуска и тому подобное. И в принципе это не проблема. Но как ничего не забыть, обо всем рассказать и никого не отвлекать при этом? Лучше всего — отправить приветственное письмо такому новому сотруднику, а еще лучше, если это будет сделано автоматически.

К счастью, надо сказать, в Microsoft Exchange есть служба «Exchange Scripting Agent», которая позволяет выполнять powershell-скрипты при выполнении предопределенных командлетов. А создание почтового ящика пользователя — это есть ни что иное как запуск одного из командлетов: New-Mailbox или Enable-Mailbox.
Итак, для приветствия нового сотрудника нам понадобятся три вещи: скрипт, текст приветственного письма и Exchange Server 2010/2013. Не мудрствуя лукаво, приведу инструкцию, как заставить работать этот процесс в три шага.

  1. Для начала необходимо разместить нижеприведенный скрипт в файле "%ProgramFiles%\Microsoft\Exchange Server\V14\Bin\CmdletExtensionAgents\ScriptingAgentConfig.xml" на каждом Exchange-сервере в организации (кроме роли Edge), плюс непосредственно на тех рабочих станциях, где установлена консоль Exchange. Не забудьте сделать резервную копию имеющегося ScriptingAgentConfig.xml на тот случай, если что-то пойдет не так. В скрипте заранее нужно изменить переменные, включая путь к файлу с текстом приветствия.

    <?xml version="1.0" encoding="utf-8" ?>
    <Configuration version="1.0">
    <Feature Name="WelcomeEmail" Cmdlets="New-Mailbox,Enable-Mailbox">
    <ApiCall Name="OnComplete">
    if($succeeded) {
         # Определение переменных
         $WelcomeMessage = "c:\scripts\welcome.html"
         $SenderEmail = "sender@domain.local"
         $MessageSubject = "Welcome to out company!"
         $SMTPServer = "mail.domain.local"
         $TargetOU = "domain.local/companyusers"
         # Указание на просмотр всего леса
         Set-ADServerSettings -ViewEntireForest $true
         # Определение Alias в случае, если была исполнена команда New-Mailbox
         if ($provisioningHandler.TaskName -eq "New-Mailbox") {
              $UsrAlias = $provisioningHandler.UserSpecifiedParameters["Alias"]
              $UsrNewMailbox = $true
         }
         # Определение Alias в случае, если была исполнена команда Enable-Mailbox
         if ($provisioningHandler.TaskName -eq "Enable-Mailbox") {
              $UsrIdentity = $provisioningHandler.UserSpecifiedParameters["Identity"].ToString()
              $UsrAlias = (Get-Mailbox -Identity $UsrIdentity).Alias
         }
         # Определение, создается ли архивный ящик (нам не нужно приветствовать пользователя при создании архива)
         if ($provisioningHandler.UserSpecifiedParameters.Contains("Archive") -eq $true) {
              $UsrArchive = $true
         }
         # Определение SMTP-адреса по Alias
         $UsrAddr = (Get-Mailbox -Filter {Alias -eq $UsrAlias}).PrimarySmtpAddress.ToString()
         # Определение Organizational Unit, в котором создан пользователь
         $UsrOU = (Get-Mailbox -Filter {Alias -eq $UsrAlias}).OrganizationalUnit
         # Отправка уведомления при создании нового почтового ящика в указанном OU
         if (($UsrOU -match "$TargetOU") -and (($UsrArchive -ne $true) -or ($UsrNewMailbox -eq $true))){
              $UsrMsg = [string](Get-Content "$WelcomeMessage")
              Send-MailMessage -SmtpServer "$SMTPServer" -To "$UsrAddr" -From "$SenderEmail" -Subject "$MessageSubject" -Body $UsrMsg -BodyAsHtml -Encoding ([System.Text.Encoding]::UTF8)
         }
         # Тихая очистка переменных
         if ($UsrAlias) { Remove-Variable UsrAlias }
         if ($UsrAddr) { Remove-Variable UsrAddr }
         if ($UsrOU) { Remove-Variable UsrOU }
         if ($UsrMsg) { Remove-Variable UsrMsg }
         if ($UsrIdentity) { Remove-Variable UsrIdentity }
         if ($UsrSamAccountName) { Remove-Variable UsrSamAccountName }
         if ($UsrArchive) { Remove-Variable UsrArchive }
         if ($UsrNewMailbox) { Remove-Variable UsrNewMailbox }
    }
    </ApiCall>
    </Feature>
    </Configuration>
    

  2. Далее нужно включить Exchange Scripting Agent с помощью команды:

    Enable-CmdletExtensionAgent "Scripting Agent"

  3. Если консоль Exchange уже была запущена, перезапускаем её. Это необходимо, что бы консоль поняла, что теперь у нас работает Scripting Agent.


Этих трех действий достаточно для рассылки приветственного письма новым сотрудникам, главное — поменять переменные в начале скрипта.

В случае необходимости внесения изменений имейте в виду, что отладка внутри «Scripting Agent» — довольно неприятная процедура, так как запуск происходит скрипта в скрытом режиме, и максимум что нам дается в таком случае — возможность писать отладочную информацию в текстовый файл.

Скрипт успешно работает на Exchange 2010 уже более года. На версии 2013, к сожалению, протестировать его работу возможности не было.
Теги:
Хабы:
Данная статья не подлежит комментированию, поскольку её автор ещё не является полноправным участником сообщества. Вы сможете связаться с автором только после того, как он получит приглашение от кого-либо из участников сообщества. До этого момента его username будет скрыт псевдонимом.