skip to content

Search

Syspirit
EN

Exchange

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

365
Published on
Karl Certa
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 [email protected]
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 "[email protected]"
Create user mailboxNew-Mailbox -Name "John Doe" -UserPrincipalName "[email protected]" -FirstName "John" -LastName "Doe"
Create shared mailboxNew-Mailbox -Name "Support" -PrimarySmtpAddress "[email protected]" -Shared
Create resource mailboxNew-Mailbox -Name "Meeting Room A" -Room -PrimarySmtpAddress "[email protected]"
Modify display nameSet-Mailbox -Identity "[email protected]" -DisplayName "John Doe - IT"
Delete mailboxRemove-Mailbox -Identity "[email protected]" -Confirm:$false
Disable mailboxSet-Mailbox -Identity "[email protected]" -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 "[email protected]"
Create dynamic listNew-DynamicDistributionGroup -Name "All IT" -Filter "Department -eq 'IT'"
Add memberAdd-DistributionGroupMember -Identity "IT Team" -Member "[email protected]"
Remove memberRemove-DistributionGroupMember -Identity "IT Team" -Member "[email protected]"
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 "[email protected]"
Add full accessAdd-MailboxPermission -Identity "[email protected]" -User "[email protected]" -AccessRights FullAccess
Add “Send As”Add-RecipientPermission -Identity "[email protected]" -Trustee "[email protected]" -AccessRights SendAs
Add “Send on Behalf”Set-Mailbox -Identity "[email protected]" -GrantSendOnBehalfTo "[email protected]"
Remove permissionRemove-MailboxPermission -Identity "[email protected]" -User "[email protected]" -AccessRights FullAccess
Enable automappingAdd-MailboxPermission -Identity "[email protected]" -User "[email protected]" -AccessRights FullAccess -AutoMapping $true
Disable automappingAdd-MailboxPermission -Identity "[email protected]" -User "[email protected]" -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 "[email protected]" | Select ProhibitSendQuota,ProhibitSendReceiveQuota
Modify user quotaSet-Mailbox -Identity "[email protected]" -ProhibitSendQuota 90GB -ProhibitSendReceiveQuota 100GB
View storage usageGet-MailboxStatistics -Identity "[email protected]" | 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