Chuyển tới nội dung chính

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