When you move a user mailbox to Exchange Online, their permissions to access distribution lists are not copied. This script copies Send As permissions from an on-premises distribution list to its counterpart in Exchange Online. To run the script, create a Custom Command or Scheduled Task configured for the Group object type.
Note: Only permissions of users who already have a Microsoft 365 (Office 365) account will be copied.
PowerShell
# Get the object ID in Exchange Online
try
{
$groupExchangeId = [Guid]$Context.TargetObject.Get("adm-O365ExchangeObjectId")
}
catch
{
$Context.LogMessage("The group is not mail-enabled in Microsoft 365", "Warning")
return
}
# Get users who have Send As permissions in Exchange on-premises
$groupParams = $Context.TargetObject.GetMailParameters()
$sendAs = $groupParams.SendAs
if ($sendAs.Count -eq 0)
{
return # No Send As permissions for the group
}
$sendAsTrustees = @()
for ($i = 0; $i -lt $sendAs.Count; $i++)
{
$object = $sendAs.GetItem($i, [ref]"ADS_PROPERTY_NONE")
$sid = $object.ObjectSid
if ([System.String]::IsNullOrEmpty($sid))
{
continue
}
if (([Softerra.Adaxes.Utils.WellKnownSecurityPrincipalInfo]::IsWellKnown($sid)))
{
continue
}
try
{
$object = $Context.BindToObject("Adaxes://<SID=$sid>")
}
catch
{
continue
}
if ($object.Class -ne "user")
{
continue
}
if (!(($object.RecipientType -eq "ADM_EXCHANGERECIPIENTTYPE_MAILBOXENABLED") -and
($object.RecipientLocation -eq "ADM_EXCHANGERECIPIENTLOCATION_OFFICE365")))
{
continue
}
# Get object ID in Microsoft 365
$objectId = [Guid]$object.Get("adm-O365ObjectId")
$sendAsTrustees += $objectId.ToString()
}
# Connect to Exchange Online
$Context.CloudServices.ConnectExchangeOnline()
foreach ($id in $sendAsTrustees)
{
# Grant Send As permissions for all users who have accounts in Microsoft 365
Add-RecipientPermission $groupExchangeId.ToString() -Trustee $id -AccessRights SendAs -Confirm:$False
}
Is this also possible for send on behalf permissions?
Remco
Hello Remco,
How exactly do you want to use the script in terms of Send on Behalf permissions? The thing is that unlike Send As, the Send on Behalf permissions are copied to Exchange Online by means of AAD Connect or DireSync and there is no need to use scripts for this purpose. Any additional details regarding the desired workflow would be very helpful.
Hello Craig,
Please, take a look at the following script from our repository: https://www.adaxes.com/script-repository/synchronize-send-as-permissions-from-exchange-on-premises-to-exchange-online-for-distribution-list-s580.htm.
The script should work fine for all Exchange recipients including shared mailboxes. Also, there is no possibility for the script to remove any delegate. All it does is adding Send As delegates in Exchange Online. If you face delegates being removed, make sure there is nothing else executed except for the script.
No, the script will not work in this case as there is nothing to copy.
After that, I run Dirsync and it is a success but I can not send an email. What should I do?
This script is dedicated to copying permissions. That is not something you need. Also, it looks like you are not using Adaxes. You just need to properly configure the mailbox permissions. If you have issues doing that, we recommend you to contact your admins or Microsoft support.