How to use OABInteg's oabfldcheck and proxytest to troubleshoot OAB Generation issues and Missing objects after an OAB downloads

This blog covers two very important tests from the Offline Address Book Integrity (OABINTEG) tool:

1. The OAB Folder Check – oabfldcheck
2. The OAB Proxy Test - proxytest

OAB Folder Check [oabfldcheck] and Proxy Test [proxytest] are two essential tests of OABInteg that can detect most OAB generation or Outlook OAB download problems. Whether these problems are PDN issues, signature mismatches, missing GAL objects these tests have the capability to help you solve those issues quickly. Any problems an Outlook client would have connecting to the OAB system folders will be displayed in the error output if the tool is failing.

OAB Folder Check [oabfldcheck]
This test will connect to the OAB system folders and interrogate the OAB system folders, messages and attachments. This test simulates a MAPI logon to the information public folder store, which is the same way Outlook and the System Attendant log on. The [oabfldcheck] test MUST be run on a Microsoft Exchange Server 2000 or 2003 server or a workstation with the Microsoft Outlook client installed. If you are going to run OABInteg on an Exchange 2007 server, the Microsoft Exchange server must have the following requirements:

1. A Public Folder Store
2. Outlook 2003 or 2007 installed or the Standalone MAPI/CDO install which can be found here: https://blogs.msdn.com/dgoldman/archive/2006/06/19/636996.aspx. For more information on why you need to install Outlook or the standalone MAPI/CDO install please reference this: https://blogs.msdn.com/dgoldman/archive/2007/02/27/installing-outlook-2007-on-an-exchange-2007-server.aspx

NOTE: By default this test with general logging will not display any of the test results, only the counters at the end of the test. As this test is running you might see the screen scrolling down, and this is normal. This was done for performance reasons while running through a command window. If you want to see all of the test results, please use the /v2 command line parameter at the end of your command line syntax (Example: oabinteg.exe /s:SrvName /t:oabfldcheck /l /v:2)

This test will also output the following counters when it has completed and this is very useful when troubleshooting OAB message replication between public folders, or for general server sizing:

• Message Class Normal found
• Message Class Differential found
• Message Class Unknown found
• Message Attachments found:
• Messages found but unable to read the properties
• System folders found
• Highest sequence number found
• Lowest sequence number found
• Biggest attachment found (in Bytes, MB & GB)
• Smallest attachment found (in Bytes, MB & GB)
• Biggest message found (in Bytes, MB & GB)
• Smallest message found (in Bytes, MB & GB)
• Total number of entries processed in the address book

How to run this test: OABInteg /s:SrvName /t:oabfldcheck /v:2 /l (This will create a c:\oabinteg.txt file).

Sample Output of the oabfldcheck test

=====================================================
OABInteg (Offline Address Book Integrity Checker)
Product Version 06.05.7839.1
OABInteg.exe
Microsoft Corporation, Copyright (C) 2006
Microsoft and Windows are registered trademarks of Microsoft Corporation.
=====================================================

Command line arguments: oabinteg /s:SrvName /t:oabfldcheck /v:2 /l

Checking to see if OABInteg is running on an Exchange Server
Checking version of Exchange Server
Exchange 2003 Version: 6.5.6944.00
Exchange 2003 Service Pack Version: 6.5.7638.2.
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Exchange\Setup\ registry key has been closed.
Total registry keys found 1.
Total registry values found 3.

NOTE: Running this tool against a resource mailbox account will most likely cause the tool to fail

Registry scan started at: 04:55:53 PM

Checking for user MAPI profiles.
The MAPI subsystem was initialized successfully.

Profile found: OABInteg-Admin_06:54:11 PM
Profile found: Outlook
Profile found: Outlook (Online)

Logoff of profile successful.
Closing MAPI session.
The MAPI subsystem was un-initialized successfully.

Checking for Exchange system MAPI profiles.
WARNING: No exchange server profiles on this system. This is ok.

Registry scan ended at: 04:55:53 PM

Starting Test 9 - OAB System Folder Check
OAB System folder check started at: 04:55:53 PM
The MAPI subsystem was initialized successfully.

Attempting to create OABInteg-Admin_04:55:53 PM profile on ComputerName.
OABInteg-Admin_04:55:53 PM profile was created in the Windows Messaging Subsystem on ComputerName.

Obtaining a MAPI Session.
Initializing MAPI profile.
Logging on to MAPI session with the selected profile.
Profile linked to Mailbox: /o=microsoft/ou=northamerica/cn=Recipients/cn=dgoldman
Profile Version: 0x1
Profile Type: 0x0

Sort Locale being used by the server is: 1033
Code Page being used by the server is 1252
Global Address book opened using address book provider.
Address book root entry scanned.
Current profile is using dc01.company.com for NSPI queries to the active directory.
Opening the Exchange Public Folder Store.
Retrieving the message store table.
Obtaining store table properties.

Hierarchy Server: PF-01
Store Offline: 0 (1 = True | 0 = False)

Trying to retrieve the property for the PR_ADDRBOOK_FOR_LOCAL_SITE_ENTRYID.
Property for PR_ADDRBOOK_FOR_LOCAL_SITE_ENTRYID found.
PR_ADDRBOOK_FOR_LOCAL_SITE_ENTRYID: 001030401A447390AA6311C59BC600AC002FC45A0300B4CF3F5BE03DC0499AB
Using the PR_ADDRBOOK_FOR_LOCAL_SITE_ENTRYID to open the OAB System folder.
System folder opened.

Folder Name: /o=microsoft/cn=addrlists/cn=oabs/cn=Default Offline Address List
Replica Server Name: PF-01
URL Name: /NON_IPM_SUBTREE/OFFLINE ADDRESS BOOK/
Parent folder has subfolders: 1 (1 = True / 0 = False)
Folder Child Count: 3
Folder Type: 1
Published in the address book: 1 (1 = True / 0 = False)
Folder has rules: 0
Overall folder age limit: 9999

Obtaining the hierarchy table for the system folder.
3 folders found.

Folder Name: OAB Version 2
Replica Server Name: PF-01
URL Name: /NON_IPM_SUBTREE/OFFLINE ADDRESS BOOK/
Parent folder has subfolders: 0 (1 = True / 0 = False)
Folder Child Count: 0
Folder Type: 1
Published in the address book: 1 (1 = True / 0 = False)
Folder has rules: 0
Overall folder age limit: 30
77 messages found.

Message Conversation Topic: \Global Address List - browse2.oab - 77
Message OAB Name: \Global Address List
Message OAB DN: /
OAB Normal Message class
Message Code Page: 0x4e4
Message Size: 60 MB
Message Local Id: 0x0
Message OAB Sequence: 77
OAB Container GUID: 7c16d39a-79d8-41a4-8b30-6b21f0c9bc7f

Obtaining the attachment table for message.
102 attachments found.

Attachment Number: 0

…… <cut attachments to truncate display> ……

Attachment Number: 101
OAB Message Creation Time: 11:36:08.0888AM 03/07/2007
OAB Message Last Modification Time: 11:37:11.0605AM 03/07/2007

Message Conversation Topic: \Global Address List - changes.oab - 77
Message OAB Name: \Global Address List
Message OAB DN: /
OAB Differential Message class
Message Code Page: 0x4e4
Message Size: 244385 Bytes
Message Local Id: 0x0
Message OAB Sequence: 77
OAB Container GUID: 7c16d39a-79d8-41a4-8b30-6b21f0c9bc7f

Obtaining the attachment table for message.
1 attachments found.

You will see this output for all versions of OAB that are found (OAB Version 2, OAB Version 3 and OAB Version 4).

Scan Completed
Message Class Normal found: 3
Message Class Differential found: 256
Message Class Unknown found: 0
Message Attachments found: 0
Messages found but unable to read the properties: 0
System folders found: 4
Highest sequence number found: 1256
Lowest sequence number found: 2
Biggest attachment found: 0 Bytes
Smallest attachment found: 36500 Bytes
Biggest message found: 62 MB
Smallest message found: 14316 Bytes

Scan Ended at: 04:58:53 PM

Closing session to the public folder information store. Please wait.
Closing reference to System Folders.
Closing connection to the public folder information store. Please wait.

OABInteg-Admin_06:05:30 PM profile was found and deleted from the Windows Messaging Subsystem.

Logoff of profile successful.
Closing MAPI session.
The MAPI subsystem was un-initialized successfully.

Performing cleanup.
Exiting application.

OAB Proxy Test [proxytest]
This test closely resembles the OAB Generation process with regards to what it does. Unlike the OAB Generation process which writes the data to the respective oab files, this test displays everything to the log file. The test queries the Global Address List and looks at each object to make sure it passes all of the requirements before it can be added to the Global Address List. If there is an object that doesnt meet the requirements the object will be skipped during the generation process and an error will be logged in the application log if the diagnostic logging level is turned up. For more information on user objects not showing up in cached mode after an OAB rebuild please reference this blog: https://blogs.msdn.com/dgoldman/archive/2006/07/03/New-Active-Directory-objects-are-not-showing-after-Cached-Mode-clients-download-the-OAB.aspx

The [proxytest] test MUST be run on a Microsoft Exchange Server 2000 or 2003 server or a workstation with the Microsoft Outlook client installed. If you are going to run OABInteg on an Exchange 2007 server, the Microsoft Exchange server must have the following requirements:
1. Outlook 2003 or 2007 installed or the Standalone MAPI/CDO install which can be found here: https://blogs.msdn.com/dgoldman/archive/2006/06/19/636996.aspx. For more information on why you need to install Outlook or the standalone MAPI/CDO install please reference this: https://blogs.msdn.com/dgoldman/archive/2007/02/27/installing-outlook-2007-on-an-exchange-2007-server.aspx

Prior to Service Pack 1 for Exchange Server 2003, company-wide full downloads of the OAB could occur because of Simple Mail Transfer Protocol (SMTP) address mismatches. In an SMTP address problem, a differential update is created, but Outlook cannot correctly parse the update.

All mail-enabled objects (mailbox, contact, and distribution group) in your organization must have a mail attribute and a proxyAddresses attribute. The proxyAddresses attribute must contain a primary SMTP proxy with the same alias as the mail attribute. For example, if the mail attribute is someone@contoso.com, SMTP:someone@contoso.com must reside in the proxyAddresses attribute. A valid primary SMTP proxy must be in the form "SMTP:<alias>@<domain.com>" (not "smtp:"), where alias is the user's e-mail alias and domain.com is the company's domain name.

Note: A primary SMTP proxy starts with "SMTP:" (all uppercase) and additional SMTP proxies start with "smtp:" (all lowercase).

Other factors to consider with respect to SMTP addresses include:
• The maximum length of an SMTP relative distinguished name (the portion followed by the at sign (@)) is 63 characters.
• The alias and the domain name must not begin with any of these characters: space, !"#$%&`()*+,-./ or any unprintable character. Domain names typically begin with a letter or number, but mistyping a space at the beginning is a common error.
• The SMTP problem as it relates to OAB downloads affects differential updates only. The user's Active Directory service entry must be changed to appear in the differential update file. It is possible for the entry to appear in the differential update (as if a change had been made) if there exists another user in your organization who has the same displayName attribute in Active Directory.

In Exchange Server 2003 SP1, SMTP address mismatches no longer create the need for full OAB downloads because the users with the mismatched addresses are not added to the OAB. Instead, when such a user is encountered, the following event is generated in the Application event log of the OAB server:

Event Type: Error
Event Source: MSExchangeSA
Event Category: OAL Generator
Event ID: 9325
User: Administrator
Computer: OABGen-Server
Description:
OALGen will skip user entry ' Dave Goldman' in address list '\Global Address
List' because the SMTP address '' is invalid.
- Default Offline Address List

To determine whether to add a user to an OAB, OABGen performs several validation tasks to determine if the SMTP proxy addresses for each user are correct and not malformed or mismatched. If any of the validation tasks fail, the user is not added to the OAB, and the earlier event log entry is logged.

This will also stand for the legacyExchangeDN attribute. If this attribute does not begin with /=o or /=O we cannot verify if this is a valid object and we will skip this user object during the rebuild process. This test will scan for all user objects to see if they have the correct attributes, if not they will be logged by this application.

This test will also test to see if the objects legacy exchangeDN starts with /o= or /O=. If it does not or is incorrect we will record this.

1. Select the server you are going to work on.
2. Run oabinteg /s:SrvName /t:proxytest /v:2 /l (creates c:\oabinteg.txt file). Benchmark file
3. Turn up diagnostic logging for replication events so you can see the outbound and inbound replication.
4. Make your changes.
5. Rerun Run oabinteg (oabfldcheck and proxytest)
And compare the changes to the first this way you can see if anything went wrong.

NOTE: You need an Online profile for this so you can get the results from the GAL. This should report any problem you will have with objects BEFORE you run the OAB Generation process. This will allow you time to get them fixed before they break something. If you run this test with a cached mode profile you will get inconsistent results as it will be reading from the client side files.

6. Once you feel that everything has been replicated then you can rerun: oabinteg /s:SrvName /t:proxytest /v:2 /l (creates c:\oabinteg.txt file).

Compare these results from the remote servers to the first one.
This will give you all of the information about the attachments, sequence numbers, sizes, etc.

=====================================================
OABInteg (Offline Address Book Integrity Checker)
Product Version 06.05.7839.1
OABInteg.exe
Microsoft Corporation, Copyright (C) 2006
Microsoft and Windows are registered trademarks of Microsoft Corporation.
=====================================================

Command line arguments: oabinteg /s:srv /t:proxytest /v:2 /l

Checking to see if OABInteg is running on an Exchange Server
Checking version of Exchange Server
Exchange 2003 Version: 6.5.6944.00
Exchange 2003 Service Pack Version: 6.5.7638.2.
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Exchange\Setup\ registry key has been closed.
Total registry keys found 1.
Total registry values found 3.
NOTE: Running this tool against a resource mailbox account will most likely cause the tool to fail

Starting Test 5 - Primary Proxy Attribute Test

NOTE: You can use the /v:2 switch for maximum logging. This will display everything
The MAPI subsystem was initialized successfully.

Attempting to create OABInteg-Admin_06:25:24 PM profile on ComputerName.
OABInteg-Admin_06:25:24 PM profile was created in the Windows Messaging Subsystem on ComputerName.

Obtaining a MAPI Session.
Initializing MAPI profile.
Logging on to MAPI session with the selected profile.

Profile linked to Mailbox: /o=microsoft/ou=northamerica/cn=Recipients/cn=dgoldman
Profile Version: 0x1
Profile Type: 0x0

Sort Locale being used by the server is: 1033
Code Page being used by the server is 1252
Global Address book opened using address book provider.
Address book root entry scanned.
Current profile is using dc01.company.com for NSPI queries to the active directory.
Using MAPI session to open address list - /Global Address List
Retrieved contents table for Address Book container.
SetColumns completed.
Calling SeekRow to set bookmark to the first row returned in query.

You can hit 'ESC' to abort this test.

50 rows returned in QueryRow

Processing Address Book Entry #1 of 50.
Display Name = Dave Goldman
Object is a mailbox object
LegacyExchangeDN starts with '/o=' or '/O='. Value = /o=microsoft/ou=northamerica/cn=Recipients/cn=dgoldman
Primary Proxy Address found. Value = dgoldman@microsoft.com
Primary Proxy Address has a vaild unicode domain. Value = @microsoft.com
SMTP Domain is valid and contains '@'.
X500 Address is: X500:/o=microsoft/ou=northamerica/cn=Recipients/cn=dgoldman
Proxy Address SMTP:dgoldman@microsoft.com is 8 characters. (First 8 characters)
Primary Proxy Address found. Value = SMTP:dgoldman@microsoft.com.
Primary Proxy Address and mail attribute match.
Primary Proxy Address = dgoldman@microsoft.com, mail attribute = dgoldman@microsoft.com.
Primary Proxy Address has a valid domain. Value = @microsoft.com

Scan Finished
Total number of entries processed in the address book: 241004
Total number of entries skipped: 0
Total number of contacts: 12868
Total number of mailboxes: 95214
Total number of distribution lists: 131193
Total number of groups: 0
Total number of folders: 282
Total number of Address Book Container objects found: 0
*Total number of temp legacyExchangeDN's found: 5
**Total number of objects that are missing some main attributes: 126
**Total number of objects that mail and proxy attribute don't match: 12
**Total number of objects that do not have a domain value: 0
**Total number of objects that do not have a valid unicode domain value: 0
**Total number of objects that do not have a valid SMTP Domain because first character is not greater than '/': 0
**Total number of objects that do not start with /o= or /O=: 1
**Total user objects that are missing the Primary Proxy address attribute: 0
***Total user objects with proxy addresses equal to or over 64 characters: 0
***Total objects with the '@' character in the legacyExchangeDN: 6
****Total objects with bad Active Directory Backlinks: 0
Total objects that have a legacyExchangeDN of ADCDisableMail: 1
Total objects that have a legacyExchangeDN of ADCDisableMailByADC: 0

OABInteg-Admin_05:04:33 PM profile was found and deleted from the Windows Messaging Subsystem.

Logoff of profile successful.
Closing MAPI session.
The MAPI subsystem was un-initialized successfully.

c:\OABinteg.txt has been closed.

Performing cleanup.
Exiting application.

Explaination
NOTE: The real display from OABInteg does not have the * in front of the objects. I put that here so I can show you which objects are grouped together.

You can search for Error or **in the oabinteg.txt file to find the objects that have these problems and get them fixed by correcting the attributes that are malformed or missing.

External download location: https://code.msdn.microsoft.com/oabinteg/Release/ProjectReleases.aspx?ReleaseId=726

OABInteg documentation: https://blogs.msdn.com/dgoldman/archive/2005/08/28/oabinteg-and-how-to-use-it-to-troubleshoot-oab-generation-issues.aspx

Dave