Exchange On-Premises Commands

Exchange Server PowerShell cmdlets for on-premises email management.

Exchange Management Shell Setup

Add-PSSnapin Microsoft.Exchange.Management.PowerShell.SnapIn

Load Exchange cmdlets (2010)

$Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri http://server/PowerShell/

Remote PowerShell session

Import-PSSession $Session

Import remote session

Get-Command -PSSnapin Microsoft.Exchange*

List Exchange cmdlets

Get-ExchangeServer

List all Exchange servers

Server Startup Procedure

Step 1: Start Windows services

Ensure Exchange services start

Get-Service MSExchange* | Start-Service

Start all Exchange services

Step 2: Verify service status

Check all services are running

Get-Service MSExchange* | Where-Object {$_.Status -ne "Running"}

Find stopped Exchange services

Step 3: Test connectivity

Verify Exchange is responding

Test-ServiceHealth

Test Exchange service health

Get-ServerHealth

Get server health status

Mailbox Management

Get-Mailbox

Get all mailboxes

Get-Mailbox -Identity user

Get specific mailbox

New-Mailbox -Name "John Doe" -UserPrincipalName john@domain.com

Create new mailbox

Enable-Mailbox -Identity user

Enable mailbox for existing user

Disable-Mailbox -Identity user

Disable mailbox

Remove-Mailbox -Identity user

Remove mailbox

Set-Mailbox -Identity user -ProhibitSendQuota 50GB

Set mailbox quota

Get-MailboxStatistics -Identity user

Get 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-MailboxDatabase

List all mailbox databases

New-MailboxDatabase -Name "DB01" -EdbFilePath "D:\DB01\DB01.edb"

Create mailbox database

Mount-Database -Identity DB01

Mount database

Dismount-Database -Identity DB01

Dismount database

Get-MailboxDatabaseCopyStatus

Check database copy status (DAG)

Update-MailboxDatabaseCopy -Identity DB01\SERVER

Update database copy

Suspend-MailboxDatabaseCopy -Identity DB01\SERVER

Suspend database replication

Resume-MailboxDatabaseCopy -Identity DB01\SERVER

Resume database replication

Set-MailboxDatabase -Identity DB01 -IssueWarningQuota 45GB

Set database quota

Database Availability Group (DAG)

Get-DatabaseAvailabilityGroup

List all DAGs

New-DatabaseAvailabilityGroup -Name DAG01 -WitnessServer FS01

Create new DAG

Add-DatabaseAvailabilityGroupServer -Identity DAG01 -MailboxServer SERVER

Add server to DAG

Remove-DatabaseAvailabilityGroupServer -Identity DAG01 -MailboxServer SERVER

Remove server from DAG

Add-MailboxDatabaseCopy -Identity DB01 -MailboxServer SERVER

Add database copy

Remove-MailboxDatabaseCopy -Identity DB01\SERVER

Remove database copy

Move-ActiveMailboxDatabase -Server SERVER -Confirm:$false

Failover active databases

Transport & Mail Flow

Get-TransportRule

Get all transport rules

New-TransportRule -Name "Disclaimer" -ApplyHtmlDisclaimerText "<p>Disclaimer</p>"

Create transport rule

Get-Queue

View 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.com

Track messages from sender

Get-TransportService

Get transport service status

Connectors

Get-ReceiveConnector

List receive connectors

New-ReceiveConnector -Name "Internet" -Bindings 0.0.0.0:25

Create receive connector

Set-ReceiveConnector -Identity "Default" -MaxMessageSize 50MB

Configure receive connector

Get-SendConnector

List send connectors

New-SendConnector -Name "Internet" -AddressSpaces "*" -SourceTransportServers SERVER

Create send connector

Set-SendConnector -Identity "Internet" -MaxMessageSize 50MB

Configure send connector

Distribution Groups

Get-DistributionGroup

Get all distribution groups

New-DistributionGroup -Name "Team" -PrimarySmtpAddress team@domain.com

Create distribution group

Add-DistributionGroupMember -Identity team@domain.com -Member user@domain.com

Add member to group

Remove-DistributionGroupMember -Identity team@domain.com -Member user@domain.com

Remove member from group

Get-DistributionGroupMember -Identity team@domain.com

List group members

Set-DistributionGroup -Identity team@domain.com -RequireSenderAuthenticationEnabled $false

Allow external senders

Public Folders

Get-PublicFolder

List public folders

New-PublicFolder -Name "Folder" -Path \

Create public folder

Get-PublicFolderDatabase

List public folder databases (2010)

Get-PublicFolderMailbox

List public folder mailboxes (2013+)

New-PublicFolderMailbox -Name PF01

Create public folder mailbox (2013+)

Get-PublicFolderStatistics

Get public folder statistics

Update-PublicFolderHierarchy

Update public folder hierarchy

Client Access

Get-ClientAccessServer

List Client Access servers (2013)

Get-ClientAccessService

List Client Access services (2016+)

Get-OwaVirtualDirectory

Get OWA virtual directories

Set-OwaVirtualDirectory -Identity "SERVER\owa" -ExternalUrl https://mail.domain.com/owa

Configure OWA URL

Get-EcpVirtualDirectory

Get ECP virtual directories

Get-ActiveSyncVirtualDirectory

Get ActiveSync virtual directories

Get-WebServicesVirtualDirectory

Get EWS virtual directories

Get-OutlookAnywhere

Get Outlook Anywhere settings

Set-OutlookAnywhere -Identity "SERVER\Rpc" -ExternalHostname mail.domain.com

Configure Outlook Anywhere

Permissions & Access Rights

Add-MailboxPermission -Identity user@domain.com -User delegate@domain.com -AccessRights FullAccess

Grant full access

Remove-MailboxPermission -Identity user@domain.com -User delegate@domain.com -AccessRights FullAccess

Remove full access

Add-ADPermission -Identity user@domain.com -User delegate@domain.com -ExtendedRights Send-As

Grant Send As permission

Add-MailboxFolderPermission -Identity user@domain.com:\Calendar -User delegate@domain.com -AccessRights Editor

Grant calendar permissions

Get-MailboxPermission -Identity user@domain.com

List mailbox permissions

Address Lists & Policies

Get-AddressList

List address lists

Update-AddressList -Identity "All Users"

Update address list

Get-GlobalAddressList

List global address lists

Update-GlobalAddressList -Identity "Default"

Update GAL

Get-EmailAddressPolicy

List email address policies

Update-EmailAddressPolicy -Identity "Default"

Apply email address policy

Certificates

Get-ExchangeCertificate

List Exchange certificates

New-ExchangeCertificate -GenerateRequest -SubjectName "cn=mail.domain.com" -DomainName autodiscover.domain.com

Generate CSR

Import-ExchangeCertificate -FileData ([Byte[]]$(Get-Content cert.cer -Encoding byte))

Import certificate

Enable-ExchangeCertificate -Thumbprint <thumbprint> -Services IIS,SMTP

Enable certificate for services

Get-ExchangeCertificate -Thumbprint <thumbprint> | Format-List

View certificate details

Maintenance & Troubleshooting

Test-ServiceHealth

Test service health

Get-ServerHealth

Get server health status

Test-MapiConnectivity -Database DB01

Test MAPI connectivity

Test-OutlookWebServices -Identity user@domain.com

Test Outlook Web Services

Get-ExchangeDiagnosticInfo -Server SERVER -Process EdgeTransport

Get diagnostic information

Get-EventLogLevel

Get diagnostic logging levels

Set-EventLogLevel -Identity "MSExchange Assistants\Service" -Level High

Set diagnostic logging

Backup & Recovery

Get-MailboxRestoreRequest

List mailbox restore requests

New-MailboxRestoreRequest -SourceDatabase DB01 -SourceStoreMailbox <guid> -TargetMailbox user

Restore mailbox from database

Get-MailboxExportRequest

List mailbox export requests

New-MailboxExportRequest -Mailbox user -FilePath \\server\share\user.pst

Export mailbox to PST

New-MailboxImportRequest -Mailbox user -FilePath \\server\share\user.pst

Import PST to mailbox

Remove-StoreMailbox -Database DB01 -Identity <guid>

Purge disconnected mailbox

Reports & Statistics

Get-Mailbox | Get-MailboxStatistics | Sort TotalItemSize -Descending

Mailbox sizes report

Get-MailboxDatabase | Get-MailboxStatistics | Group Database | Select Name,Count

Mailboxes per database

Get-Queue | Where-Object {$_.MessageCount -gt 0}

Active mail queues

Get-ExchangeServer | Test-ServiceHealth

Test all servers health

Get-Mailbox -ResultSize Unlimited | Export-Csv mailboxes.csv

Export mailbox list