Einrichten eines Scriptings-Agent in Microsoft Exchange 2013

Die Administratoren die mit dem Microsoft Exchange 2013 Server arbeiten, stehen immer wieder vor der Herausforderung das nach der Erstellung eines Mailbox-Users noch viele Dinge nach konfiguriert werden müssen. Viele Dinge können während der Einrichtung einer neuen Mailbox nicht konfiguriert werden, wie z.B. Single-Item Restore, POP3, IMAP4 etc. Ich wurde immer wieder gefragt, ob man dieses nicht automatisieren kann, ebenso ob es eine Möglichkeit dem User automatisch eine Willkommens-Email in der Mailbox bereitzustellen.


Hierfür bietet der Microsoft Exchange Server eine sehr gute Möglichkeit. 

Im Installationsverzeichnis vom Microsoft Exchange Server findet Ihr im "Bin" Verzeichnis ein Unterordner mit der Bezeichnung "CmdletExtension Agents". In diesem Verzeichnis liegt eine Datei mit dem Namen ScriptingAgentConfig.xml.


Mit Hilfe dieser Datei ist es möglich den Exchange internen Script Agent zu steuern. Das bedeutet im Klartext, das sobald ein Powershell Cmdlet wie z.B. Enable-Mailbox etc. benutzt wird, der Script Agent eine weitere Aktion auslöst. Diese Aktion könnte z.B. das Senden einer Email oder das Ausführen weiterer Cmdlets sein.


Nachfolgend ein Beispiel, womit nach dem verwenden des Cmdlets New-Mailbox oder Enable-Mailbox eine Email an den Helpdesk versendet. Natürlich habt Ihr die Möglichkeit auch andere Aktionen auszuführen, probiert es ruhig aus.


 <?xml version="1.0" encoding="utf-8" ?>

<Configuration version="1.0">

<Feature Name="Welcome Email" Cmdlets="New-Mailbox,Enable-Mailbox">

          <ApiCall Name="OnComplete">

           if($succeeded)  

           {

                if ($provisioningHandler.TaskName -eq "New-Mailbox")

                {

                # Replace place holder.

                $USRdname=$provisioningHandler.UserSpecifiedParameters["Name"]

                # Picking Primary SMTP address,saving to $pSMTP to send email.

                $Ualias=$provisioningHandler.UserSpecifiedParameters["Alias"]

                $pSMTP = (get-mailbox $Ualias | select-object PrimarySMTPAddress | Format-Wide | Out-String ).trim()

                $tempmsg= [string] (get-content ("C:\Email-Templates\Inform-Helpdesk\template.htm"))

                $tempmsg = $tempmsg -replace "NewUser00",$USRdname

                $tempmsg = $tempmsg -replace "NewUserMail00",$pSMTP

                }             

                elseif ($provisioningHandler.TaskName -eq "Enable-Mailbox")

                {

                # Picking Primary SMTP address,saving to $pSMTP to send email.

                $eUalias=$provisioningHandler.UserSpecifiedParameters["Alias"]

                $dName = (get-mailbox $eUalias | select-object Name | Format-Wide | Out-String ).trim()       

                $pSMTP = (get-mailbox $eUalias | select-object PrimarySMTPAddress | Format-Wide | Out-String ).trim()

                # Replace place holder.

                $tempmsg= [string](get-content ("C:\Email-Templates\Inform-Helpdesk\template.htm"))

                $tempmsg = $tempmsg -replace "NewUser00",$USRdname

$tempmsg = $tempmsg -replace "NewUserMail00",$pSMTP

}

Send-MailMessage -From "exchange@domäne.com" -To "recipient@domäne.de" -SMTPServer "smtp01.domäne.com" -Subject "New Mailbox Created " -Body $tempmsg -BodyAsHTML

            }

  </ApiCall>

</Feature>

</Configuration>

 

Beispiel 2

Ein weiteres Beispiel, womit Ihr das Mailbox Audit Logging automatisch aktiviert wird:

 <?xml version="1.0" encoding="utf-8" ?>

<Configuration version="1.0">

<Feature Name="Welcome Email" Cmdlets="New-Mailbox,Enable-Mailbox">

          <ApiCall Name="OnComplete">

If ($succeeded)

  {

  $Alias= $provisioningHandler.UserSpecifiedParameters["Alias"]

$mailbox = Get-Mailbox $Alias

Set-Mailbox $mailbox -AuditEnabled:$true

  }

  </ApiCall>

</Feature>

</Configuration>

 

Nach dem Ihr das Script eingerichtet habt, müsst Ihr den Script Agent in der Exchange Powershell noch aktivieren. Zuerst schauen wir uns mal an welche Agents auf dem System eingerichtet und aktiviert sind. Hierzu gebt Ihr bitte folgenden Befehl in der Exchange Powershell ein:

 

Get-CmdletExtensionAgent | ft name,enabled -auto

 

Nach dem Ihr den Befehl abgesetzt habt, könnt Ihr dann sehen ob der Scripting Agent aktiviert ist oder nicht. Sollte der noch nicht aktiviert sein, dann könnt Ihr dies mit folgenden Exchange Powershell Befehl tun:

 

Enable-CmdletExtensionAgent "Scripting Agent"

 

 Sobald Ihr dies getan habt, sind alle notwendigen Arbeiten abgeschlossen und der Scripting Agent läuft. Nun heist es testen und scripten.

 

Viel Spass und Happy Scripting. ;-)

 


Weitere Beispiele:


Beispiel 3:

Dieses Beispiel aktiviert die SingleItemRecovery Funktion und setzt Benutzerdefinierte Kalender Berechtigungen bei der Nutzung von Enable-Mailbox und New-Mailbox Cmdlets:

<?xml version="1.0" encoding="utf-8" ?>

<Configuration version="1.0">

  <Feature Name="NewMailbox" Cmdlets="new-Mailbox">

   <ApiCall Name="OnComplete">

    if($succeeded)    {

                Start-sleep 20

                $DC = [string]($readOnlyIConfigurable.originatingserver)

                $newmailbox = $provisioningHandler.UserSpecifiedParameters["Name"]

                Set-mailbox -Identity $Newmailbox -SingleItemRecoveryEnabled $True -DomainController $DC.domain.com

 

                $AccessRights = "Reviewer"

                $mailbox = Get-Mailbox $newmailbox

                $calendar = (($mailbox.SamAccountName)+ ":\" + (Get-MailboxFolderStatistics -Identity $mailbox.SamAccountName -FolderScope Calendar | Select-Object -First 1).Name)

                Set-MailboxFolderPermission -User "Default" -AccessRights $AccessRights -Identity $calendar -DomainController $DC.domain.com

                

    }

   </ApiCall>

  </Feature>

  <Feature Name="EnableMailbox" Cmdlets="enable-Mailbox">

   <ApiCall Name="OnComplete">

    if($succeeded)    {

                Start-sleep 20

                $DC = [string]($readOnlyIConfigurable.originatingserver)

                $newmailbox = $provisioningHandler.UserSpecifiedParameters["Identity"]

                set-mailbox -Identity "$newmailbox" -SingleItemRecoveryEnabled $True -DomainController $DC.domain.com

 

                $AccessRights = "Reviewer"

                $mailbox = Get-Mailbox -identity "$newmailbox"

                $calendar = (($mailbox.SamAccountName)+ ":\" + (Get-MailboxFolderStatistics -Identity $mailbox.SamAccountName -FolderScope Calendar | Select-Object -First 1).Name)

                Set-MailboxFolderPermission -User "Default" -AccessRights $AccessRights -Identity $calendar -DomainController $DC.domain.com

    }

   </ApiCall>

  </Feature>

</Configuration>

 

Beispiel 4:

Dieses Beispiel deaktiviert POP3 und IMAP4 auf neu erstellten Mailboxen:

<?xml version="1.0" encoding="utf-8" ?>

<Configuration version="1.0">

  <Feature Name="NewMailbox" Cmdlets="New-Mailbox">

   <ApiCall Name="OnComplete">

    if($succeeded)    {

                Start-sleep 20

                $DC = [string]($readOnlyIConfigurable.originatingserver)

                $NewMailbox = $provisioningHandler.UserSpecifiedParameters["Name"]

        Set-CASMailbox -Identity $NewMailbox -ImapEnabled $false -POPEnabled $false  -DomainController $DC.domain.com             

                

    }

   </ApiCall>

  </Feature>

  <Feature Name="EnableMailbox" Cmdlets="Enable-Mailbox">

   <ApiCall Name="OnComplete">

    if($succeeded)    {

                Start-sleep 20

                $DC = [string]($readOnlyIConfigurable.originatingserver)

                $NewMailbox = $provisioningHandler.UserSpecifiedParameters["Name"]

        Set-CASMailbox -Identity $NewMailbox -ImapEnabled $false -POPEnabled $false  -DomainController $DC.domain.com

    }

   </ApiCall>

  </Feature>

</Configuration>

 

Beispiel 5:

Das Nachfolgende Beispiel deaktiviert Outlook Anywhere:

<?xml version="1.0" encoding="utf-8" ?>

<Configuration version="1.0">

  <Feature Name="NewMailbox" Cmdlets="New-Mailbox">

   <ApiCall Name="OnComplete">

    if($succeeded)    {

                Start-sleep 20

                $DC = [string]($readOnlyIConfigurable.originatingserver)

                $NewMailbox = $provisioningHandler.UserSpecifiedParameters["Name"]

        Set-CASMailbox -Identity $NewMailbox -MAPIBlockOutlookRpcHttp $True  -DomainController $DC.domain.com             

                

    }

   </ApiCall>

  </Feature>

  <Feature Name="EnableMailbox" Cmdlets="Enable-Mailbox">

   <ApiCall Name="OnComplete">

    if($succeeded)    {

                Start-sleep 20

                $DC = [string]($readOnlyIConfigurable.originatingserver)

                $NewMailbox = $provisioningHandler.UserSpecifiedParameters["Name"]

        Set-CASMailbox -Identity $NewMailbox -MAPIBlockOutlookRpcHttp $True  -DomainController $DC.domain.com   

    }

   </ApiCall>

  </Feature>

</Configuration>

Kommentar schreiben

Kommentare: 0