I’ve been involved in relatively large Exchange Server 2010 multi-tenanted solutions recently and during my deployments we decided to move away from a dedicated server for Offline Address Book (OAB) generation to increase the efficiency of OAB generation while decreasing the time it takes for the OABs to generate.

In a multi-tenanted environment you have many address lists to cater for all the tenants you’re providing services to. This can cause a great deal of OAB generation processing on a dedicated server which slows down the rate at which OABs are generated, because they are all being generated by the same server. Depending on the size of the environment you could potentially have hundreds of OAB’s that get generated daily.

To get around this problem we distributed the OABs to multiple generation servers based on a random pattern. It’s relatively easy to script the move to a random server with PowerShell:

Write-Host "Getting all Exchange 2007 address books."
[array]$OABs=Get-offlineaddressbook | ?{$_.ExchangeVersion -lt 14}
foreach ($OAB in $OABs)
$OABName = $OAB.Name
$OABGenServer = Get-MailboxServer | ?{$_.AdminDisplayVersion.Major -ge 14} | Get-Random -Count 1
Write-Host "Moving Offline Address Book $OABName to $OABGenServer"
Move-OfflineAddressBook "$OABName" -Server $OABGenServer -Confirm:$false -ea SilentlyContinue


To keep this randomized distribution you need to ensure that the Control Panel doesn’t parse a server value to the new-offlineaddressbook cmdlet. This will ensure that the cmdlet will choose a random server during Offline Address Book creation and keep the OAB’s distributed over all your mailbox servers.

Some references to very valuable Exchange Server 2010 multi-tenancy documentation:


Until next time....