Exchange Online PowerShell
Exchange Online PowerShell cmdlets for Microsoft 365 email management.
Module Setup & Connection
Install-Module -Name ExchangeOnlineManagementInstall Exchange Online module
Import-Module ExchangeOnlineManagementImport Exchange Online module
Connect-ExchangeOnlineConnect to Exchange Online
Connect-ExchangeOnline -UserPrincipalName admin@domain.comConnect with specific account
Connect-ExchangeOnline -CertificateThumbprint <thumbprint> -AppId <appid> -Organization tenant.onmicrosoft.comConnect with certificate authentication
Disconnect-ExchangeOnlineDisconnect from Exchange Online
Get-Command -Module ExchangeOnlineManagementList all Exchange Online cmdlets
Mailbox Management
Get-MailboxGet all mailboxes
Get-Mailbox -Identity user@domain.comGet specific mailbox
Get-Mailbox -RecipientTypeDetails UserMailboxGet user mailboxes only
Get-Mailbox -RecipientTypeDetails SharedMailboxGet shared mailboxes
New-Mailbox -Name "John Doe" -UserPrincipalName john@domain.comCreate new mailbox
Set-Mailbox -Identity user@domain.com -ProhibitSendQuota 50GBSet mailbox quota
Enable-Mailbox -Identity user@domain.comEnable mailbox for user
Disable-Mailbox -Identity user@domain.comDisable mailbox
Remove-Mailbox -Identity user@domain.comRemove mailbox
Get-MailboxStatistics -Identity user@domain.comGet mailbox size statistics
Get-Mailbox | Get-MailboxStatistics | Select DisplayName,TotalItemSizeGet all mailbox sizes
Shared Mailbox Management
New-Mailbox -Shared -Name "Support Team" -PrimarySmtpAddress support@domain.comCreate shared mailbox
Set-Mailbox -Identity shared@domain.com -Type SharedConvert mailbox to shared
Add-MailboxPermission -Identity shared@domain.com -User user@domain.com -AccessRights FullAccessGrant full access to shared mailbox
Remove-MailboxPermission -Identity shared@domain.com -User user@domain.com -AccessRights FullAccessRemove full access permission
Add-RecipientPermission -Identity shared@domain.com -Trustee user@domain.com -AccessRights SendAsGrant Send As permission
Get-MailboxPermission -Identity shared@domain.comList mailbox permissions
Distribution Group Management
Get-DistributionGroupGet all distribution groups
Get-DistributionGroup -Identity "Group Name"Get specific group
New-DistributionGroup -Name "Team Group" -PrimarySmtpAddress team@domain.comCreate distribution group
Set-DistributionGroup -Identity team@domain.com -DisplayName "New Name"Update group properties
Remove-DistributionGroup -Identity team@domain.comDelete distribution group
Add-DistributionGroupMember -Identity team@domain.com -Member user@domain.comAdd member to group
Remove-DistributionGroupMember -Identity team@domain.com -Member user@domain.comRemove member from group
Get-DistributionGroupMember -Identity team@domain.comList group members
Mail Flow Rules (Transport Rules)
Get-TransportRuleGet all mail flow rules
Get-TransportRule -Identity "Rule Name"Get specific rule
New-TransportRule -Name "Disclaimer" -ApplyHtmlDisclaimerText "<p>Disclaimer</p>"Create mail flow rule
Set-TransportRule -Identity "Rule Name" -Priority 0Change rule priority
Enable-TransportRule -Identity "Rule Name"Enable rule
Disable-TransportRule -Identity "Rule Name"Disable rule
Remove-TransportRule -Identity "Rule Name"Delete rule
Anti-Spam & Protection
Get-HostedContentFilterPolicyGet anti-spam policies
Set-HostedContentFilterPolicy -Identity Default -SpamAction MoveToJmfConfigure spam action
Get-HostedOutboundSpamFilterPolicyGet outbound spam filter policy
Get-MalwareFilterPolicyGet malware filter policies
Get-PhishFilterPolicyGet anti-phishing policies
Get-SafeLinksPolicyGet Safe Links policies (Defender)
Get-SafeAttachmentPolicyGet Safe Attachments policies (Defender)
Mail Contact & User Management
Get-MailContactGet all mail contacts
New-MailContact -Name "External User" -ExternalEmailAddress external@company.comCreate mail contact
Set-MailContact -Identity contact@domain.com -DisplayName "New Name"Update mail contact
Remove-MailContact -Identity contact@domain.comRemove mail contact
Get-MailUserGet all mail users
Get-UserGet all users
Calendar & Resource Mailboxes
Get-Mailbox -RecipientTypeDetails RoomMailboxGet room mailboxes
Get-Mailbox -RecipientTypeDetails EquipmentMailboxGet equipment mailboxes
New-Mailbox -Room -Name "Conference Room A" -PrimarySmtpAddress room-a@domain.comCreate room mailbox
New-Mailbox -Equipment -Name "Projector 1" -PrimarySmtpAddress proj1@domain.comCreate equipment mailbox
Set-CalendarProcessing -Identity room-a@domain.com -AutomateProcessing AutoAcceptEnable auto-accept for room
Set-CalendarProcessing -Identity room-a@domain.com -BookingWindowInDays 180Set booking window
Get-CalendarProcessing -Identity room-a@domain.comGet calendar processing settings
Email Address Policies & Addresses
Get-EmailAddressPolicyGet email address policies
Update-EmailAddressPolicy -Identity "Default Policy"Apply email address policy
Set-Mailbox -Identity user@domain.com -EmailAddresses @{Add="smtp:alias@domain.com"}Add email alias
Set-Mailbox -Identity user@domain.com -PrimarySmtpAddress newprimary@domain.comChange primary email address
Get-Recipient -Filter {EmailAddresses -like "*@olddomain.com"}Find recipients with specific domain
Message Tracking & Logs
Get-MessageTrace -SenderAddress sender@domain.com -StartDate (Get-Date).AddDays(-7)Track messages from sender
Get-MessageTrace -RecipientAddress recipient@domain.com -StartDate (Get-Date).AddDays(-1)Track messages to recipient
Get-MessageTraceDetail -MessageTraceId <id> -RecipientAddress user@domain.comGet detailed message trace
Start-HistoricalSearch -ReportTitle "Search" -StartDate 1/1/2024 -EndDate 1/31/2024Start historical message search
Get-HistoricalSearchGet historical search status
Mailbox Permissions & Delegation
Add-MailboxPermission -Identity user@domain.com -User delegate@domain.com -AccessRights FullAccessGrant full access permission
Remove-MailboxPermission -Identity user@domain.com -User delegate@domain.com -AccessRights FullAccessRemove full access permission
Add-RecipientPermission -Identity user@domain.com -Trustee delegate@domain.com -AccessRights SendAsGrant Send As permission
Add-MailboxFolderPermission -Identity user@domain.com:\Calendar -User delegate@domain.com -AccessRights EditorGrant calendar permissions
Get-MailboxPermission -Identity user@domain.comList mailbox permissions
Get-MailboxFolderPermission -Identity user@domain.com:\CalendarList calendar permissions
Mailbox Audit & Compliance
Set-Mailbox -Identity user@domain.com -AuditEnabled $trueEnable mailbox auditing
Get-Mailbox -ResultSize Unlimited | Set-Mailbox -AuditEnabled $trueEnable audit for all mailboxes
Search-MailboxAuditLog -Identity user@domain.com -StartDate 1/1/2024Search mailbox audit log
Get-MailboxAuditBypassAssociationGet audit bypass associations
New-ComplianceSearch -Name "Search" -ExchangeLocation All -ContentMatchQuery "subject:confidential"Create compliance search
Inbox Rules & OWA Policies
Get-InboxRule -Mailbox user@domain.comGet user inbox rules
Remove-InboxRule -Mailbox user@domain.com -Identity "Rule Name"Remove inbox rule
Get-OwaMailboxPolicyGet Outlook Web App policies
Set-OwaMailboxPolicy -Identity Default -DirectFileAccessOnPublicComputersEnabled $falseConfigure OWA policy
Quarantine & Blocked Senders
Get-QuarantineMessageGet quarantined messages
Release-QuarantineMessage -Identity <id>Release message from quarantine
Delete-QuarantineMessage -Identity <id>Delete quarantined message
Get-BlockedSenderAddressGet blocked sender addresses
Set-HostedContentFilterPolicy -Identity Default -BlockedSenders @{Add="spam@spammer.com"}Add blocked sender
Reports & Statistics
Get-Mailbox | Get-MailboxStatistics | Sort-Object TotalItemSize -DescendingGet mailboxes by size
Get-Mailbox -ResultSize Unlimited | Measure-ObjectCount total mailboxes
Get-DistributionGroup | Measure-ObjectCount distribution groups
Get-Mailbox | Get-MailboxStatistics | Select DisplayName,ItemCount,@{n="Size(MB)";e={[math]::Round($_.TotalItemSize.Value.ToMB(),2)}}Mailbox size report
Get-Mailbox | Export-Csv mailboxes.csv -NoTypeInformationExport mailbox list to CSV
Bulk Operations
Import-Csv users.csv | ForEach-Object {New-Mailbox -Name $_.Name -UserPrincipalName $_.UPN}Bulk create mailboxes from CSV
Get-Mailbox | Set-Mailbox -RetainDeletedItemsFor 30Bulk set deleted item retention
Get-Mailbox -RecipientTypeDetails SharedMailbox | Export-Csv shared-mailboxes.csvExport shared mailboxes
Import-Csv members.csv | ForEach-Object {Add-DistributionGroupMember -Identity "Group" -Member $_.Email}Bulk add group members
Session Connection Procedure
# Step 1: Verify module installationGet-Module -ListAvailable ExchangeOnlineManagement
# Step 2: Install module if missingInstall-Module -Name ExchangeOnlineManagement -Force
# Step 3: Import moduleImport-Module ExchangeOnlineManagement
# Step 4: Connect to Exchange OnlineConnect-ExchangeOnline
# Step 5: Verify connectionGet-Mailbox -ResultSize 1
# Alternative: Connect with UPNConnect-ExchangeOnline -UserPrincipalName admin@domain.com
# Alternative: Connect with certificateConnect-ExchangeOnline -CertificateThumbprint <thumbprint> -AppId <appid> -Organization tenant.onmicrosoft.com
Session Disconnection Procedure
# Step 1: Verify active sessionGet-ConnectionInformation
# Step 2: Disconnect from Exchange OnlineDisconnect-ExchangeOnline -Confirm:$false
# Step 3: Verify disconnectionGet-ConnectionInformation (should be empty)
# Step 4: Remove module (optional)Remove-Module ExchangeOnlineManagement