EASYENTRA Blog

News & Updates

How to Copy Mailbox Delegation Permissions Between Mailboxes in Microsoft 365 

How to copy mailbox delegation from one mailbox to another using PowerShell or the EXO Admin Center.

If you’ve ever needed to replicate mailbox permissions from one user to another in Microsoft 365, you know it’s not a simple copy/paste operation. Mailbox delegation permissions are configured individually for each mailbox, and they come in three distinct flavors: Full Access, Send As, and Send on Behalf. 

Each type uses its own permission model and requires different PowerShell CmdLets to manage, which means there’s no one-size-fits-all approach. In this blog, we’ll walk through how to copy mailbox delegation permissions from one user to another in Microsoft 365. 

What are the Mailbox Permission Types in Microsoft 365 

Before we dive into the how-to, let’s clarify what each permission type does: 

  • Full Access: Allows a delegate to open another user’s mailbox and read, create, modify, and delete items. The delegate can’t send email as that user unless they also have Send As or Send on Behalf permissions. 
  • Send As: Lets a delegate send email that appears to come directly from the mailbox owner. Recipients see the owner’s name in the “From” field, not the delegate’s. 
  • Send on Behalf: Similar to Send As, but recipients can see that the email was sent by the delegate on behalf of the mailbox owner (it shows as “Delegate on behalf of Owner”). 

Each of these permissions is managed separately in Microsoft 365’s backend, which is why copying them requires different commands. 

How to Copy Mailbox Permissions Using Exchange Admin Center 

Most admins who handle this task through the Exchange Admin Center follow a painful, click-intensive process: 

  1. Sign in to the Exchange admin center
  1. Go to Recipients Mailboxes
  1. Select the source mailbox and click Delegation in the properties pane to see all assigned permissions.

From there, they document each assigned permission, navigate back to the mailbox list, open the target mailbox, and manually re-add every delegate one by one, repeating the process for each permission type. This constant back-and-forth navigation involves dozens of clicks, increases the risk of errors, and can easily become a time-consuming process when multiple delegates are involved.

 Copy Mailbox Permission From One User to Another Using PowerShell 

PowerShell offers a way to automate this, but you need to understand which cmdlets handle which permissions. Here’s a complete example that extracts all three delegation types from a source mailbox and applies them to a target mailbox.



[CmdletBinding()]
param(
    [Parameter(Mandatory=$true)]
    [string]$SourceMailbox,
    
    [Parameter(Mandatory=$true)]
    [string]$TargetMailbox
)

# Function to write colored output
function Write-ColorOutput {
    param(
        [string]$Message,
        [string]$Color = "White"
    )
    Write-Host $Message -ForegroundColor $Color
}

# Check if Exchange Online module is installed
if (-not (Get-Module -ListAvailable -Name ExchangeOnlineManagement)) {
    Write-ColorOutput "Exchange Online PowerShell module is not installed." "Red"
    Write-ColorOutput "Please install it using: Install-Module -Name ExchangeOnlineManagement" "Yellow"
    exit
}

# Connect to Exchange Online
Write-ColorOutput "`nConnecting to Exchange Online..." "Cyan"
try {
    Connect-ExchangeOnline -ShowBanner:$false
    Write-ColorOutput "Successfully connected to Exchange Online.`n" "Green"
} catch {
    Write-ColorOutput "Failed to connect to Exchange Online: $_" "Red"
    exit
}

# Verify source mailbox exists
Write-ColorOutput "Verifying source mailbox: $SourceMailbox" "Cyan"
try {
    $SourceMbxObj = Get-Mailbox -Identity $SourceMailbox -ErrorAction Stop
    Write-ColorOutput "Source mailbox found.`n" "Green"
} catch {
    Write-ColorOutput "Source mailbox not found: $_" "Red"
    exit
}

# Verify target mailbox exists
Write-ColorOutput "Verifying target mailbox: $TargetMailbox" "Cyan"
try {
    $TargetMbxObj = Get-Mailbox -Identity $TargetMailbox -ErrorAction Stop
    Write-ColorOutput "Target mailbox found.`n" "Green"
} catch {
    Write-ColorOutput "Target mailbox not found: $_" "Red"
    exit
}

# Initialize counters
$FullAccessCount = 0
$SendAsCount = 0
$SendOnBehalfCount = 0

# Copy Full Access permissions
Write-ColorOutput "=" * 60 "Cyan"
Write-ColorOutput "COPYING FULL ACCESS PERMISSIONS" "Cyan"
Write-ColorOutput "=" * 60 "Cyan"

try {
    $FullAccessPerms = Get-MailboxPermission -Identity $SourceMailbox | 
        Where-Object { 
            $_.User -notlike "NT AUTHORITY\*" -and 
            $_.User -notlike "S-1-5-*" -and 
            $_.IsInherited -eq $false -and 
            $_.AccessRights -contains "FullAccess" 
        }

    if ($FullAccessPerms) {
        foreach ($Perm in $FullAccessPerms) {
            try {
                Add-MailboxPermission -Identity $TargetMailbox -User $Perm.User -AccessRights FullAccess -InheritanceType All -ErrorAction Stop | Out-Null
                Write-ColorOutput "✓ Added Full Access for: $($Perm.User)" "Green"
                $FullAccessCount++
            } catch {
                Write-ColorOutput "✗ Failed to add Full Access for $($Perm.User): $_" "Red"
            }
        }
    } else {
        Write-ColorOutput "No Full Access permissions found on source mailbox." "Yellow"
    }
} catch {
    Write-ColorOutput "Error retrieving Full Access permissions: $_" "Red"
}

Write-ColorOutput ""

# Copy Send As permissions
Write-ColorOutput "=" * 60 "Cyan"
Write-ColorOutput "COPYING SEND AS PERMISSIONS" "Cyan"
Write-ColorOutput "=" * 60 "Cyan"

try {
    $SendAsPerms = Get-RecipientPermission -Identity $SourceMailbox | 
        Where-Object { 
            $_.Trustee -notlike "NT AUTHORITY\*" -and 
            $_.Trustee -notlike "S-1-5-*" -and 
            $_.AccessRights -contains "SendAs" 
        }

    if ($SendAsPerms) {
        foreach ($Perm in $SendAsPerms) {
            try {
                Add-RecipientPermission -Identity $TargetMailbox -Trustee $Perm.Trustee -AccessRights SendAs -Confirm:$false -ErrorAction Stop | Out-Null
                Write-ColorOutput "✓ Added Send As for: $($Perm.Trustee)" "Green"
                $SendAsCount++
            } catch {
                Write-ColorOutput "✗ Failed to add Send As for $($Perm.Trustee): $_" "Red"
            }
        }
    } else {
        Write-ColorOutput "No Send As permissions found on source mailbox." "Yellow"
    }
} catch {
    Write-ColorOutput "Error retrieving Send As permissions: $_" "Red"
}

Write-ColorOutput ""

# Copy Send on Behalf permissions
Write-ColorOutput "=" * 60 "Cyan"
Write-ColorOutput "COPYING SEND ON BEHALF PERMISSIONS" "Cyan"
Write-ColorOutput "=" * 60 "Cyan"

try {
    $SendOnBehalfPerms = $SourceMbxObj.GrantSendOnBehalfTo

    if ($SendOnBehalfPerms -and $SendOnBehalfPerms.Count -gt 0) {
        try {
            Set-Mailbox -Identity $TargetMailbox -GrantSendOnBehalfTo @{Add=$SendOnBehalfPerms} -ErrorAction Stop
            foreach ($Delegate in $SendOnBehalfPerms) {
                Write-ColorOutput "✓ Added Send on Behalf for: $Delegate" "Green"
                $SendOnBehalfCount++
            }
        } catch {
            Write-ColorOutput "✗ Failed to add Send on Behalf permissions: $_" "Red"
        }
    } else {
        Write-ColorOutput "No Send on Behalf permissions found on source mailbox." "Yellow"
    }
} catch {
    Write-ColorOutput "Error retrieving Send on Behalf permissions: $_" "Red"
}

# Summary
Write-ColorOutput "`n" "White"
Write-ColorOutput "=" * 60 "Cyan"
Write-ColorOutput "SUMMARY" "Cyan"
Write-ColorOutput "=" * 60 "Cyan"
Write-ColorOutput "Source Mailbox: $SourceMailbox" "White"
Write-ColorOutput "Target Mailbox: $TargetMailbox" "White"
Write-ColorOutput ""
Write-ColorOutput "Permissions Copied:" "White"
Write-ColorOutput "  • Full Access:     $FullAccessCount" "White"
Write-ColorOutput "  • Send As:         $SendAsCount" "White"
Write-ColorOutput "  • Send on Behalf:  $SendOnBehalfCount" "White"
Write-ColorOutput ""
Write-ColorOutput "Total Permissions:   $($FullAccessCount + $SendAsCount + $SendOnBehalfCount)" "Green"
Write-ColorOutput "=" * 60 "Cyan"
Write-ColorOutput "`nPermission copy complete!" "Green"
Write-ColorOutput ""

While this script works, it requires PowerShell knowledge, careful testing, and understanding of Exchange Online cmdlets. You also need to handle edge cases like inherited permissions, system accounts, and mailboxes that might already have some delegations configured. 

There’s a Better Way: EasyEntra Does the Heavy Lifting 

What if you could skip both the clicking marathon and the PowerShell scripting altogether? 

EasyEntra is built specifically to solve frustrating Microsoft 365 admin tasks like this. Instead of choosing between tedious manual work or complex scripting, you get a streamlined, visual interface that just works. 

How EasyEntra Simplifies Permission Copying: 

With the Exchange Admin Center: 50+ clicks, 15-20 minutes, high error risk. 
With PowerShell: Script maintenance, testing, troubleshooting, and documentation.
With EasyEntra: Select source mailbox, copy permissions with Ctrl+C, select target mailbox, paste with Ctrl+V. Done. 

What You Get: 

  • Visual permission comparison – See exactly what’s on each mailbox at a glance. 
  • Standard copy/paste workflow – Use familiar Ctrl+C and Ctrl+V keyboard shortcuts to copy all three permission types correctly, every time. 
  • Export flexibility – Copy permissions directly to Notepad, Excel, or any text editor for documentation or bulk editing. 
  • Bulk operations – Paste permissions to multiple mailboxes simultaneously. 
  • Audit trail – Know exactly what changed and when. 
  • Zero scripting required – No PowerShell knowledge needed. 
  • Always up-to-date – No script maintenance when Microsoft updates its APIs. 

Want a step-by-step walkthrough? Check out the complete guide: 
How to Copy Mailbox Permissions with EasyEntra 

Free 30-minute demo

try 30 days for free

GET EASYENTRA NEWS

Opt out at any time

“One of the best products I've used.”
Gary Shurland
Chief Information Officer, Mirick, United States
“This tool has been invaluable in streamlining our IT processes.”
Tyson Mckay
Chief Information Officer, Southwest Network, United States
“This product has been a miracle for our Help Desk. EasyEntra has completely transformed how we handle Microsoft 365 administration.”
Doug Sanders
Manager of Technical Customer Support, Junior Achievement USA, United States
“Your product is such a time saver. I love it!”
Scott Fehr
IT Infrastructure, MEC Aerial Work Platforms, United States
“It's a good product and saves us lots of time for these ongoing quick admin tasks.” 
Chris McFerran
Managing Director, CTech IT Solutions Ltd, United Kingdom
“EasyEntra has significantly streamlined our workflow, simplifying everything. It feels almost like a revolution.”
Johan Sadelius
IT-chef, Arjeplog Kommun, Sweden
I greatly appreciate your assistance and willingness to enhance the already outstanding product.”
Michael I. Wilson
Executive Director of Information Technology, Archdiocese Of Washington, United States
“It's great not having to switch back and forth between the O365 admin center and the Teams admin center to assign groups. I am sold!”
Thomas Madden
Director Information Technology, AutoPayPlus, United States
“I would highly recommend organizations use the solution as it greatly simplifies various tasks.”
S. Roger Singh
Chief Technology Officer, Prasad & Company LLP, Canada
“EasyEntra is time-saving. Love the copy/paste for user/computer groups and the copy to new user.”
Damian Nita
Associate Network Administrator, Shenandoah Valley Westminster-Canterbury, United States
“EasyEntra has transformed our daily IT operations by simplifying user management, reducing errors, and enhancing overall efficiency.”
Henrik Nefling
IT- and Digitalization Manager, Animal Protection Denmark, Denmark