Exchange Server Management
Transport Rules
Add Disclaimer to Outbound Email
$Condition = Get-TransportRulePredicate FromScope
$Condition.Scope = "InOrganization"
$Condition2 = Get-TransportRulePredicate SentToScope
$Condition2.Scope = "NotInOrganization"
$Action = Get-TransportRuleAction ApplyDisclaimer
$Action.Text = "Sample disclaimer text"
New-TransportRule -Name "Sample disclaimer" `
-Condition @($Condition, $Condition2) `
-Action @($Action)
Client Access Array
Remove Client Access Array
Remove-ClientAccessArray owa.contoso.com
Create New Client Access Array
New-ClientAccessArray "Hayward CAS Array" `
-Fqdn "webemail.contoso.com" `
-Site "Hayward-Site-10"
Set RPC Client Access Server for Databases
Set-MailboxDatabase DB01 -RpcClientAccessServer "webemail.contoso.com"
Set-MailboxDatabase DB02 -RpcClientAccessServer "webemail.contoso.com"
Set-MailboxDatabase DB03 -RpcClientAccessServer "webemail.contoso.com"
Set-MailboxDatabase DB04 -RpcClientAccessServer "webemail.contoso.com"
Database Management
View Activation Preference
Get-MailboxDatabase | Format-List Name, Ac*
Example output:
Name : MBDB1
ActivationPreference : {[VKD-EXS-01, 1], [VKD-EXS-02, 2]}
Name : MBDB2
ActivationPreference : {[VKD-EXS-02, 1], [VKD-EXS-01, 2]}
Set Activation Preference
Set-MailboxDatabaseCopy -Identity MBDB2\VKD-EXS-01 -ActivationPreference 1
Move Database Path and Log Folder
Move-DatabasePath "<database-name>" `
-EdbFilePath "C:\Newlocation\DBname.edb" `
-LogFolderPath "C:\Newlocation"
Caution: This will dismount the store temporarily causing downtime.
Verify Database Path
Get-MailboxDatabase "<database-name>" | Format-List Name, *Path*
Check Database White Space
# Mailbox databases
Get-MailboxDatabase -Status |
Select-Object Server, Name, AvailableNewMailboxSpace
# Public folder databases (Exchange 2010)
Get-PublicFolderDatabase -Status "<database-name>" |
Format-Table Name, DatabaseSize, AvailableNewMailboxSpace
Offline Defragmentation
# Check for dirty shutdown
Eseutil /mh <database-path>
# If dirty shutdown, perform offline defrag
Eseutil /d <database-path>
Address Lists & OAB
Update Address Lists and OAB
# Update Global Address List
Get-GlobalAddressList | Update-GlobalAddressList
# Update Address Lists
Get-AddressList | Update-AddressList
# Update Offline Address Book
Get-OfflineAddressBook | Update-OfflineAddressBook
# Update File Distribution Service
Update-FileDistributionService -Identity "<server-name>"
Receive Connectors
List Anonymous Permissions
Get-ReceiveConnector -Identity "<connector-name>" |
Get-ADPermission |
Where-Object {
$_.AccessRights -eq 'ExtendedRight' -and
$_.ExtendedRights -like 'ms-Exch-SMTP-Accept-Any-Recipient'
} |
Select-Object Identity, User, ExtendedRights
Grant Anonymous Relay Permission
Get-ReceiveConnector "<connector-name>" |
Add-ADPermission -User "NT AUTHORITY\ANONYMOUS LOGON" `
-ExtendedRights "Ms-Exch-SMTP-Accept-Any-Recipient"
Grant Specific User Relay Permission
Get-ReceiveConnector "<connector-name>" |
Add-ADPermission -User "DOMAIN\relay-authgroup" `
-ExtendedRights "Ms-Exch-SMTP-Accept-Any-Recipient"
Optimize Receive Connector
Get-ReceiveConnector -Identity "<connector-name>" |
Set-ReceiveConnector `
-TarpitInterval 00:00:00 `
-ConnectionTimeout 00:30:00 `
-ConnectionInactivityTimeout 00:20:00 `
-MaxAcknowledgementDelay 00:00:00 `
-MaxInboundConnection 10000 `
-MaxInboundConnectionPercentagePerSource 100 `
-MaxInboundConnectionPerSource Unlimited
Copy IP Ranges Between Connectors
Set-ReceiveConnector "server1\Relay Connection" `
-RemoteIPRanges (Get-ReceiveConnector "server2\Relay Connection").RemoteIPRanges
Throttling Policy
Create and Apply Throttling Policy
# Create VIP throttling policy
New-ThrottlingPolicy vipThrottlingPolicy
# Configure unlimited settings
Set-ThrottlingPolicy vipThrottlingPolicy `
-RCAMaxConcurrency Unlimited `
-EWSMaxConcurrency Unlimited `
-EWSMaxSubscriptions Unlimited `
-CPAMaxConcurrency Unlimited `
-EwsCutoffBalance Unlimited `
-EwsMaxBurst Unlimited `
-EwsRechargeRate Unlimited
# Apply to specific mailbox
Set-Mailbox "<username>" -ThrottlingPolicy vipThrottlingPolicy
System Mailbox Management
Move System Mailboxes
# List system mailboxes
Get-Mailbox -Database mdb01b -Arbitration
# Move individual system mailbox
New-MoveRequest -Identity "SystemMailbox{1f05a927-e097-4b11-af30-2b272bae0a89}" `
-TargetDatabase "SZ-1GB-A1"
# Bulk move system mailboxes
Get-Mailbox -Database "c1-300mb-a1" -Arbitration |
New-MoveRequest -TargetDatabase "c1-300mb-a01"
# Check move request status
Get-MoveRequest
Retention Policy
Apply Retention Policy to Mailbox
# Check current policy
Get-Mailbox <username> | Format-List Name, RetentionPolicy
# Set retention policy
Set-Mailbox "<username>" -RetentionPolicy "delete 3 years"
# Force immediate application
Start-ManagedFolderAssistant -Identity <username>
Public Folder Management
Public Folder Statistics
Get-PublicFolderStatistics -Server C1EX01A |
Select-Object AdminDisplayName, CreationTime, LastModificationTime,
LastUserAccessTime, ItemCount, TotalItemSize,
ServerName, DatabaseName |
Export-CSV C:\publicfolderstats.csv
Decommission Last Exchange 2013 Server
# 1. Remove OAB
Remove-OfflineAddressBook -Identity "Default Offline Address Book"
# 2. Disable arbitration mailboxes
Get-Mailbox -Arbitration -Database <database> |
Disable-Mailbox -Arbitration -DisableLastArbitrationMailboxAllowed
# 3. Disable discovery mailboxes
Get-Mailbox -DiscoverySearchMailbox | Disable-Mailbox
# 4. Remove disabled mailboxes (see troubleshooting guide)
# 5. Proceed with uninstall