One feature of Exchange that can be quite wonderful is the Offline Address Book, but I find, to most people the process and troubleshooting of the feature is more of a dark art. If the Offline Address Book is considered magic then David Goldman ( would be the Merlyn or Gandolf of this process.

Some of the challenges that Dave has assisted me with are related to the size of the directory in my environment which supports over 2.4 million objects.

So this blog will be dedicated to Dave and all the help he has given me over the years to better understand the OAB process. I could not explain its function as well as Dave however I am going to give a high level overview of how the OAB process works in Exchange 2007.

Lets start by talking about the service that is responsible for generating the OAB, the Microsoft Exchange System Attendant (MAD.EXE), This service is only located on an Exchange 2007 Server that has the mailbox role installed.

The system attendant invokes OABGEN.DLL

If we read the description we will see what the service is utilized for:

Forwards directory lookups to a global catalog server for legacy Outlook clients, generates e-mail addresses and offline address books, updates free/busy information for legacy clients, and maintains permissions and group memberships for the server. If this service is disabled, any services that explicitly depend on it will fail to start.

As you can see the service is responsible for a number of different Exchange items however we are going to keep our focus on the offline address book, from here on out referred to as OAB.

Now that we know what service is responsible for OAB generation how do we know what server is actually responsible?

Open EMC

Organizational Configuration

Select Mailbox

Select the tab Offline Address Book

from this view you can see if you have configured an OAB or which server is responsible for generating the OAB.

We could have also used EMS to get this information with the get-offlineaddressbook command

I am going to delete the current OAB that I have created so we can walk through the few simple steps to configure the OAB.

1. Right Click -> New OAB

2. Provide a Name for your address list, I am going to use OAB Demo

3. Click browse and select the server you wish to generate the OAB

**Note at the time of writing this there is a known issue with OAB generation on an Exchange Mailbox server installed on Windows 2008 that is hosted on a clustered node **

4. Select or Deselect if you wish to publish the default global or add any additional address lists.

5. click Next

We now get prompted to ask for the methods to distribute the OAB to clients. New to Exchange 2007 and Outlook 2007 are the web distribution points that I will go into more detail later. The 2nd option is public folders, which all clients pre Outlook 2007 will utilize to download the OAB.

I am going to enable both options:

Once you enable web distribution you must click the ADD button to select the CAS servers you want to act as distribution points

Notice the OAB virtual directory which is used for web distribution

6. Click Next to continue

7. On the configuration summary we are show the options we selected -> click New

8. On the completion page we are shown the powershell commands that where run to configure the OAB. -> click finish

Now that we have setup a new OAB generation let look at what options whe can configure

1. Rick the the OAB and select properties

2. On the General Tab we have the Name and default schedule which runs 1 time per day at 5am

Select the customize button to manipulate the schedule

3. If we select the address list tab we can see the lists that we select to generate an OAB for

4. If we select the distribution tab we have some setting we did not have in EMC during creation. This is the ability to tell the system which version of OAB to generate v2,v3, or v4. I recommand you only select v4 as it has a number of improvements over the previous version.

the link below has additional information about each version


So we setup and OAB and clicked a few buttons so what happens next?

Lets start by turning up the logging for the OAB so that we can get more information from the events logs to assist us in our journey to figure what is about to happen.

In Exchange 2007 the only way to turn up the logging is via EMS, there are some tools written that will provide a gui for this function but lets stay native for now.

1. Open EMS

2. Set-eventloglevel “MSExchangeSA\OAL Generator” -loglevel medium

On each server listed as the generating server we can find the following directory where the SA places a compressed version of the OAB

C:\Program Files\Microsoft\Exchange Server\ExchangeOAB

* this assumes the default installation path*

Since we just created our OAB this path is currently empty, you will also notice the folder is shared.

unfortunately there is no magic way or registry key that you can use to move this from inside the installation path. So if you wish this to be on the D drive then you must install Exchange to the D drive.

Lets look at the permission on the share, as we know there are 2 types of permissions Share Permissions and NTFS permission. I am not going to explain the differences and which wins in the article but you should understand those.

The Share Permission have 3 accounts with rights:

Administrators – FC

System – FC

Exchange Servers – Read

On the NTFS permission we can see:

Exchange Server Read and Execute

Administrators – FC

System – FC

Lets force the OAB to run so we can populate this folder, we can do that in a number of ways from EMS or EMC.

1. open EMC

2. Organizational Configuration

3. Mailbox

4. Select the OAB tab

5. Right click the address book that we created -> select update

6. What are then prompted for verification to continue, Click Yes and the OAB generation has been started.

Now lets revisit the ExchangeOAB folder on our generation server.

You can see that we now have a folder which is the guid of the address list

you can also see this from the get-offlineaddressbook command

Server : E2K7MBX1

AddressLists : {Default Global Address List}

Versions : {Version4}

IsDefault : True

PublicFolderDatabase : E2K7MBX1\Second Storage Group\Public Folderdatabase

Identity : \OAB Demo

Guid : e56699d4-2b04-4268-bfc6-55cc60500cb2

ObjectCategory : vm1.local/Configuration/Schema/ms-Exch-OAB

Now lets open that folder and see whats inside……………….

In the graphic below you see we have a number of compressed files and a file called OAB.XML

Let open the OAB.XML file and see whats inside

Later we will discuss how the files get from this location to where the need to be for clients to download.

Event Logs:

Now that we started the generation process lets take a look in the events logs to see what information we get.

The first event we come across in the logs tells us that the OAB generation process is going to write files to C:\Windows\Temp. When the OAB makes calles to AD temporarily writes this information to the Temp directory before creating the address list information.

The 2nd event we see is our generation server making a connection to AD to our DC which it will use to get the user information for the OAB

Our 3rd event is telling us that the OAB generation has started

The 4th event tells us that our server is making a connection to the public folders to deploy a copy of the OAB

The 5th event tells us that our OAB list is being generated

The 6st event shows us that the server is generating OAB v4 files

The 7th event tells us that the generation server did not see the manifest file, since this is our first run that is ok, however it could mean there is an issue.

The 8th event tells us the generation server is opening the OAB folder on the public folder server to copy the OAB information

The 9th and final event tells us that the OAB process has been completed

How do the files get to the Public Folder and CAS server

After the OAB files have been created on the generation server the CAS servers use Microsoft Exchange File Distrobution service to copy the files to the distribution point on the CAS servers.

At the moment the synchronization has not happened and by default occurs every 8 hours, so we can see that our CAS server currently do not have the data replicated.

by deafult the distrobution point on the CAS server is located in c:\program files\microsoft\Exchange Server\ClientAccess\OAB

Lets restart the Microsoft Exchange File Distrobution service to force the files to synchronize

“C:\Program Files\Microsoft\Exchange Server\Bin\MSExchangeFDS.exe”

We can now see that on the files have been copied from the generation server to our CAS server and are ready to be downloaded by Outlook 2007 users.

How does the OAB get from the generation server to the public folders?

As we can see above the OAB generation process make calls to the public folders, this is done via a mapi session that is created by the system attendant service and passes this to OABgen.dll which makes the connection to the system folders for OAB download


How does the OAB get from the server to the client?

This answer depends on what version of Outlook is being used and the client configuration. As you know with Outlook 2007 and autodiscover we can now configure web distribution points as seen above.

For Outlook 2003 or older this client will make mapi calls to the public folder to download the OAB

How can I validate this has worked

Lets open Outlook 2007 and test our autodiscover to see if we are recieving the OAB url for web distrobution.


Next lets force a OAB full download for our client.


now we can put Outlook into offline mode and see if we can still browse the directory.

J. Peter Bruzzese has a nice site with video clips and turned this blog into a instructional video see the link below for the video clip

To Be continued……

sight movie showtimes barbie fairytopia australia the movie small town folk mummy movie creepshow 2 house movie stone cold free movie babylon ad movie news tracey fragments the bolt the movie shutter laserdisc movie mr hobbs takes a vacation movie posters chop shop movie father