Exchange On-Premises Commands
Exchange Server PowerShell cmdlets for on-premises email management.
Exchange Management Shell Setup
Add-PSSnapin Microsoft.Exchange.Management.PowerShell.SnapInLoad Exchange cmdlets (2010)
$Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri http://server/PowerShell/Remote PowerShell session
Import-PSSession $SessionImport remote session
Get-Command -PSSnapin Microsoft.Exchange*List Exchange cmdlets
Get-ExchangeServerList all Exchange servers
Server Startup Procedure
Step 1: Start Windows servicesEnsure Exchange services start
Get-Service MSExchange* | Start-ServiceStart all Exchange services
Step 2: Verify service statusCheck all services are running
Get-Service MSExchange* | Where-Object {$_.Status -ne "Running"}Find stopped Exchange services
Step 3: Test connectivityVerify Exchange is responding
Test-ServiceHealthTest Exchange service health
Get-ServerHealthGet server health status
Mailbox Management
Get-MailboxGet all mailboxes
Get-Mailbox -Identity userGet specific mailbox
New-Mailbox -Name "John Doe" -UserPrincipalName john@domain.comCreate new mailbox
Enable-Mailbox -Identity userEnable mailbox for existing user
Disable-Mailbox -Identity userDisable mailbox
Remove-Mailbox -Identity userRemove mailbox
Set-Mailbox -Identity user -ProhibitSendQuota 50GBSet mailbox quota
Get-MailboxStatistics -Identity userGet mailbox size statistics
Get-Mailbox -Database "DB01"Get mailboxes on specific database
New-MoveRequest -Identity user -TargetDatabase "DB02"Move mailbox to different database
Database Management
Get-MailboxDatabaseList all mailbox databases
New-MailboxDatabase -Name "DB01" -EdbFilePath "D:\DB01\DB01.edb"Create mailbox database
Mount-Database -Identity DB01Mount database
Dismount-Database -Identity DB01Dismount database
Get-MailboxDatabaseCopyStatusCheck database copy status (DAG)
Update-MailboxDatabaseCopy -Identity DB01\SERVERUpdate database copy
Suspend-MailboxDatabaseCopy -Identity DB01\SERVERSuspend database replication
Resume-MailboxDatabaseCopy -Identity DB01\SERVERResume database replication
Set-MailboxDatabase -Identity DB01 -IssueWarningQuota 45GBSet database quota
Database Availability Group (DAG)
Get-DatabaseAvailabilityGroupList all DAGs
New-DatabaseAvailabilityGroup -Name DAG01 -WitnessServer FS01Create new DAG
Add-DatabaseAvailabilityGroupServer -Identity DAG01 -MailboxServer SERVERAdd server to DAG
Remove-DatabaseAvailabilityGroupServer -Identity DAG01 -MailboxServer SERVERRemove server from DAG
Add-MailboxDatabaseCopy -Identity DB01 -MailboxServer SERVERAdd database copy
Remove-MailboxDatabaseCopy -Identity DB01\SERVERRemove database copy
Move-ActiveMailboxDatabase -Server SERVER -Confirm:$falseFailover active databases
Transport & Mail Flow
Get-TransportRuleGet all transport rules
New-TransportRule -Name "Disclaimer" -ApplyHtmlDisclaimerText "<p>Disclaimer</p>"Create transport rule
Get-QueueView mail queues
Get-Message -Queue <queue>View messages in queue
Retry-Queue -Identity <queue>Retry queue
Suspend-Message -Identity <message>Suspend message
Resume-Message -Identity <message>Resume message
Remove-Message -Identity <message>Delete message from queue
Get-MessageTrackingLog -Sender user@domain.comTrack messages from sender
Get-TransportServiceGet transport service status
Connectors
Get-ReceiveConnectorList receive connectors
New-ReceiveConnector -Name "Internet" -Bindings 0.0.0.0:25Create receive connector
Set-ReceiveConnector -Identity "Default" -MaxMessageSize 50MBConfigure receive connector
Get-SendConnectorList send connectors
New-SendConnector -Name "Internet" -AddressSpaces "*" -SourceTransportServers SERVERCreate send connector
Set-SendConnector -Identity "Internet" -MaxMessageSize 50MBConfigure send connector
Distribution Groups
Get-DistributionGroupGet all distribution groups
New-DistributionGroup -Name "Team" -PrimarySmtpAddress team@domain.comCreate 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
Set-DistributionGroup -Identity team@domain.com -RequireSenderAuthenticationEnabled $falseAllow external senders
Public Folders
Get-PublicFolderList public folders
New-PublicFolder -Name "Folder" -Path \Create public folder
Get-PublicFolderDatabaseList public folder databases (2010)
Get-PublicFolderMailboxList public folder mailboxes (2013+)
New-PublicFolderMailbox -Name PF01Create public folder mailbox (2013+)
Get-PublicFolderStatisticsGet public folder statistics
Update-PublicFolderHierarchyUpdate public folder hierarchy
Client Access
Get-ClientAccessServerList Client Access servers (2013)
Get-ClientAccessServiceList Client Access services (2016+)
Get-OwaVirtualDirectoryGet OWA virtual directories
Set-OwaVirtualDirectory -Identity "SERVER\owa" -ExternalUrl https://mail.domain.com/owaConfigure OWA URL
Get-EcpVirtualDirectoryGet ECP virtual directories
Get-ActiveSyncVirtualDirectoryGet ActiveSync virtual directories
Get-WebServicesVirtualDirectoryGet EWS virtual directories
Get-OutlookAnywhereGet Outlook Anywhere settings
Set-OutlookAnywhere -Identity "SERVER\Rpc" -ExternalHostname mail.domain.comConfigure Outlook Anywhere
Permissions & Access Rights
Add-MailboxPermission -Identity user@domain.com -User delegate@domain.com -AccessRights FullAccessGrant full access
Remove-MailboxPermission -Identity user@domain.com -User delegate@domain.com -AccessRights FullAccessRemove full access
Add-ADPermission -Identity user@domain.com -User delegate@domain.com -ExtendedRights Send-AsGrant 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
Address Lists & Policies
Get-AddressListList address lists
Update-AddressList -Identity "All Users"Update address list
Get-GlobalAddressListList global address lists
Update-GlobalAddressList -Identity "Default"Update GAL
Get-EmailAddressPolicyList email address policies
Update-EmailAddressPolicy -Identity "Default"Apply email address policy
Certificates
Get-ExchangeCertificateList Exchange certificates
New-ExchangeCertificate -GenerateRequest -SubjectName "cn=mail.domain.com" -DomainName autodiscover.domain.comGenerate CSR
Import-ExchangeCertificate -FileData ([Byte[]]$(Get-Content cert.cer -Encoding byte))Import certificate
Enable-ExchangeCertificate -Thumbprint <thumbprint> -Services IIS,SMTPEnable certificate for services
Get-ExchangeCertificate -Thumbprint <thumbprint> | Format-ListView certificate details
Maintenance & Troubleshooting
Test-ServiceHealthTest service health
Get-ServerHealthGet server health status
Test-MapiConnectivity -Database DB01Test MAPI connectivity
Test-OutlookWebServices -Identity user@domain.comTest Outlook Web Services
Get-ExchangeDiagnosticInfo -Server SERVER -Process EdgeTransportGet diagnostic information
Get-EventLogLevelGet diagnostic logging levels
Set-EventLogLevel -Identity "MSExchange Assistants\Service" -Level HighSet diagnostic logging
Backup & Recovery
Get-MailboxRestoreRequestList mailbox restore requests
New-MailboxRestoreRequest -SourceDatabase DB01 -SourceStoreMailbox <guid> -TargetMailbox userRestore mailbox from database
Get-MailboxExportRequestList mailbox export requests
New-MailboxExportRequest -Mailbox user -FilePath \\server\share\user.pstExport mailbox to PST
New-MailboxImportRequest -Mailbox user -FilePath \\server\share\user.pstImport PST to mailbox
Remove-StoreMailbox -Database DB01 -Identity <guid>Purge disconnected mailbox
Reports & Statistics
Get-Mailbox | Get-MailboxStatistics | Sort TotalItemSize -DescendingMailbox sizes report
Get-MailboxDatabase | Get-MailboxStatistics | Group Database | Select Name,CountMailboxes per database
Get-Queue | Where-Object {$_.MessageCount -gt 0}Active mail queues
Get-ExchangeServer | Test-ServiceHealthTest all servers health
Get-Mailbox -ResultSize Unlimited | Export-Csv mailboxes.csvExport mailbox list