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, к сожалению, протестировать его работу возможности не было.
Tags:
Exchange Server, Powershell

You can't comment this post because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author's username will be hidden by an alias.

Similar posts