skip to content

Search

Syspirit
EN

Exchange

Exchange administration - mailboxes, distribution groups, permissions and PowerShell scripts!

365
Published on
Updated on

Exchange Online is Microsoft’s cloud messaging service offering email, calendar and contacts features.

Installation and connection

ActionPowerShell Command
Install Exchange moduleInstall-Module -Name ExchangeOnlineManagement -Force
ConnectConnect-ExchangeOnline
Connect (MFA)Connect-ExchangeOnline -UserPrincipalName admin@tenant.com
Verify connectionGet-OrganizationConfig
DisconnectDisconnect-ExchangeOnline -Confirm:$false

Mailbox management

Mailbox types

TypeLicense RequiredUsage
UserOffice 365/M365Personal mailbox
SharedNoneTeam, department
Resource - RoomExchange Online Plan 1Room booking
Resource - EquipmentExchange Online Plan 1Shared equipment
ActionCommand
List all mailboxesGet-Mailbox -ResultSize Unlimited
Search mailboxGet-Mailbox -Identity "jdoe@tenant.com"
Create user mailboxNew-Mailbox -Name "John Doe" -UserPrincipalName "jdoe@tenant.com" -FirstName "John" -LastName "Doe"
Create shared mailboxNew-Mailbox -Name "Support" -PrimarySmtpAddress "support@tenant.com" -Shared
Create resource mailboxNew-Mailbox -Name "Meeting Room A" -Room -PrimarySmtpAddress "room-a@tenant.com"
Modify display nameSet-Mailbox -Identity "jdoe@tenant.com" -DisplayName "John Doe - IT"
Delete mailboxRemove-Mailbox -Identity "jdoe@tenant.com" -Confirm:$false
Disable mailboxSet-Mailbox -Identity "jdoe@tenant.com" -AccountDisabled:$true

Distribution groups

Exchange group types

TypeCharacteristicsUsage
Distribution List (DL)Static list, manual managementTeams, departments
Dynamic Distribution List (DDL)Based on automatic AD criteriaAll managers, new employees
Security GroupCan be used for permissionsSharePoint access + distribution
Office 365 GroupIntegrated SharePoint/TeamsFull collaboration
ActionCommand
List all groupsGet-DistributionGroup -ResultSize Unlimited
Create distribution groupNew-DistributionGroup -Name "IT Team" -PrimarySmtpAddress "it@tenant.com"
Create dynamic listNew-DynamicDistributionGroup -Name "All IT" -Filter "Department -eq 'IT'"
Add memberAdd-DistributionGroupMember -Identity "IT Team" -Member "jdoe@tenant.com"
Remove memberRemove-DistributionGroupMember -Identity "IT Team" -Member "jdoe@tenant.com"
View membersGet-DistributionGroupMember -Identity "IT Team"
Modify descriptionSet-DistributionGroup -Identity "IT Team" -Notes "Main IT team"
Delete groupRemove-DistributionGroup -Identity "IT Team" -Confirm:$false

Permissions and delegations

ActionCommand
View mailbox permissionsGet-MailboxPermission -Identity "shared@tenant.com"
Add full accessAdd-MailboxPermission -Identity "shared@tenant.com" -User "jdoe@tenant.com" -AccessRights FullAccess
Add “Send As”Add-RecipientPermission -Identity "shared@tenant.com" -Trustee "jdoe@tenant.com" -AccessRights SendAs
Add “Send on Behalf”Set-Mailbox -Identity "shared@tenant.com" -GrantSendOnBehalfTo "jdoe@tenant.com"
Remove permissionRemove-MailboxPermission -Identity "shared@tenant.com" -User "jdoe@tenant.com" -AccessRights FullAccess
Enable automappingAdd-MailboxPermission -Identity "shared@tenant.com" -User "jdoe@tenant.com" -AccessRights FullAccess -AutoMapping $true
Disable automappingAdd-MailboxPermission -Identity "shared@tenant.com" -User "jdoe@tenant.com" -AccessRights FullAccess -AutoMapping $false

Permission types

PermissionAccessTypical usage
FullAccessFull read/writeAssistant, backup
SendAsSend as ownerOfficial communication
SendOnBehalfSend on behalf ofVisible delegation
ReadPermissionRead onlyAudit, consultation

Quotas and storage

ActionCommand
View mailbox quotaGet-Mailbox -Identity "jdoe@tenant.com" | Select ProhibitSendQuota,ProhibitSendReceiveQuota
Modify user quotaSet-Mailbox -Identity "jdoe@tenant.com" -ProhibitSendQuota 90GB -ProhibitSendReceiveQuota 100GB
View storage usageGet-MailboxStatistics -Identity "jdoe@tenant.com" | Select DisplayName,TotalItemSize,ItemCount
Top 10 largest mailboxesGet-Mailbox -ResultSize Unlimited | Get-MailboxStatistics | Sort TotalItemSize -Descending | Select -First 10 DisplayName,TotalItemSize

Storage limits by license

LicenseStandard QuotaArchivingAdditional Cost
Exchange Online Plan 150 GBOptionalArchiving +/month
Office 365 E3100 GBIncluded unlimited-
Office 365 E5100 GBIncluded unlimited-
Shared Mailbox50 GB free -> 100GB with E3 licenseAvailable with license-

Export and management scripts

Export mailbox list

# Complete export with statistics
$mailboxes = Get-Mailbox -ResultSize Unlimited
$results = foreach($mailbox in $mailboxes) {
    $stats = Get-MailboxStatistics -Identity $mailbox.UserPrincipalName
    [PSCustomObject]@{
        DisplayName = $mailbox.DisplayName
        UserPrincipalName = $mailbox.UserPrincipalName
        MailboxType = $mailbox.RecipientTypeDetails
        TotalSize = $stats.TotalItemSize
        ItemCount = $stats.ItemCount
        LastLogon = $stats.LastLogonTime
        ProhibitSendQuota = $mailbox.ProhibitSendQuota
    }
}
$results | Export-Csv -Path "C:\temp\ExchangeMailboxes.csv" -NoTypeInformation -Encoding UTF8

Export distribution groups and members

# Detailed DL groups export
$groups = Get-DistributionGroup -ResultSize Unlimited
$results = foreach($group in $groups) {
    $members = Get-DistributionGroupMember -Identity $group.Identity
    foreach($member in $members) {
        [PSCustomObject]@{
            GroupName = $group.DisplayName
            GroupEmail = $group.PrimarySmtpAddress
            MemberName = $member.DisplayName
            MemberEmail = $member.PrimarySmtpAddress
            MemberType = $member.RecipientTypeDetails
        }
    }
}
$results | Export-Csv -Path "C:\temp\DistributionGroups.csv" -NoTypeInformation -Encoding UTF8

Bulk mailbox creation via CSV

# CSV format: DisplayName,UserPrincipalName,FirstName,LastName,Department
$users = Import-Csv -Path "C:\temp\NewMailboxes.csv" -Delimiter ";"
 
foreach($user in $users) {
    try {
        New-Mailbox -Name $user.DisplayName `
                   -UserPrincipalName $user.UserPrincipalName `
                   -FirstName $user.FirstName `
                   -LastName $user.LastName `
                   -Department $user.Department
        Write-Host "Mailbox created: $($user.DisplayName)" -ForegroundColor Green
    } catch {
        Write-Host "Error creating $($user.DisplayName): $($_.Exception.Message)" -ForegroundColor Red
    }
}

Bulk add members to DL groups

# CSV format: GroupName,MemberEmail
$members = Import-Csv -Path "C:\temp\GroupMembers.csv" -Delimiter ";"
 
foreach($member in $members) {
    try {
        Add-DistributionGroupMember -Identity $member.GroupName -Member $member.MemberEmail
        Write-Host "Added $($member.MemberEmail) to $($member.GroupName)" -ForegroundColor Green
    } catch {
        Write-Host "Error adding $($member.MemberEmail): $($_.Exception.Message)" -ForegroundColor Red
    }
}

Common troubleshooting

ProblemSolution
Emails not deliveredCheck Get-MessageTrace, transport rules, quotas
Shared mailbox access deniedCheck permissions, automapping, Outlook cache
Slow synchronizationForce AD sync: Start-ADSyncSyncCycle -PolicyType Delta
Mobile no longer receivingReset partnership: Remove-MobileDevice then reconnect
Quota exceededCheck Get-MailboxStatistics, enable archiving