The Exchange Scripting Agent is a not so well known featuere of Exchange 2010 – 2016 which offers the ability to run some own scripts or additional tasks after e.g. the creation of a mailbox.
As an example it can be used to run some more commands after the creation of a mailbox.
To enable the Scripting Agent you must do the following:
- Rename the ScriptingAgentConfig.xml.samle which is located in %ExchangeInstallPath%\Bin\CmdletExtensionAgents to ScriptingAgentConfig.xml
- Add the code you want to run
- Copy the XML file to all Exchange Servers in your organization
- Run
Enable-CmdletExtensionAgent "Scripting Agent"
The feature is described more detailed in TechNet: https://technet.microsoft.com/en-us/library/dd297951(v=exchg.141).aspx
<?xml version="1.0" encoding="utf-8" ?>
<Configuration version="1.0">
<!--
In order to enable Scripting Agent:
- rename this file to ScriptingAgentConfig.xml
- edit it appropriately
- run the task: enable-CmdletExtensionAgent "Scripting Agent"
In order to include into your scriptlet characters prohibited in XML, use escape sequences, e.g.
"&lt;","&gt;","&amp;" for "less than", greater than" and "ampersand respectively.
-->
<Feature Name="CreateMailbox" Cmdlets="New-Mailbox">
<ApiCall Name="OnComplete">
if($succeeded) {
Start-Sleep 10
$DC = [string]($readOnlyIConfigurable.originatingserver)
$mailbox = $ProvisioningHandler.UserSpecifiedParameters["Name"]
if((get-mailbox $mailbox).RecipientTypeDetails -eq "SharedMailbox") {
Set-Mailbox $mailbox -MessageCopyForSentAsEnabled $True -DomainController $DC.domain.local
Set-Mailbox $mailbox -MessageCopyForSendOnBehalfEnabled $True -DomainController $DC.domain.local
}
Add-MailboxPermission $mailbox -User user -AccessRights FullAccess -AutoMapping $false
}
</ApiCall>
</Feature>
<Feature Name="EnableMailbox" Cmdlets="Enable-Mailbox">
<ApiCall Name="OnComplete">
if($succeeded) {
Start-Sleep 10
$DC = [string]($readOnlyIConfigurable.originatingserver)
$user = Get-User -Identity $ProvisioningHandler.UserSpecifiedParameters["Identity"]
$mailbox = Get-Mailbox -Identity $user.DistinguishedName
if((get-mailbox $mailbox).RecipientTypeDetails -eq "SharedMailbox") {
Set-Mailbox $mailbox -MessageCopyForSentAsEnabled $True -DomainController $DC.domain.local
Set-Mailbox $mailbox -MessageCopyForSendOnBehalfEnabled $True -DomainController $DC.domain.local
}
Add-MailboxPermission $mailbox -User user -AccessRights FullAccess -AutoMapping $false
}
</ApiCall>
</Feature>
</Configuration>
