This blog covers two very important tests from the Offline Address Book Integrity (OABINTEG) tool:
1. The OAB Folder Check – oabfldcheck2. 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 Store2. Outlook 2003 or 2007 installed or the Standalone MAPI/CDO install which can be found here: http://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: http://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.1OABInteg.exeMicrosoft Corporation, Copyright (C) 2006Microsoft 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 ServerChecking version of Exchange ServerExchange 2003 Version: 6.5.6944.00Exchange 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 PMProfile found: OutlookProfile 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 CheckOAB System folder check started at: 04:55:53 PMThe 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=dgoldmanProfile Version: 0x1Profile Type: 0x0
Sort Locale being used by the server is: 1033Code Page being used by the server is 1252Global 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-01Store 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: 001030401A447390AA6311C59BC600AC002FC45A0300B4CF3F5BE03DC0499ABUsing 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-01URL Name: /NON_IPM_SUBTREE/OFFLINE ADDRESS BOOK/Parent folder has subfolders: 1 (1 = True / 0 = False)Folder Child Count: 3Folder Type: 1Published in the address book: 1 (1 = True / 0 = False)Folder has rules: 0Overall folder age limit: 9999
Obtaining the hierarchy table for the system folder.3 folders found.
Folder Name: OAB Version 2Replica Server Name: PF-01URL Name: /NON_IPM_SUBTREE/OFFLINE ADDRESS BOOK/Parent folder has subfolders: 0 (1 = True / 0 = False)Folder Child Count: 0Folder Type: 1Published in the address book: 1 (1 = True / 0 = False)Folder has rules: 0Overall folder age limit: 3077 messages found.
Message Conversation Topic: \Global Address List - browse2.oab - 77Message OAB Name: \Global Address ListMessage OAB DN: /OAB Normal Message classMessage Code Page: 0x4e4Message Size: 60 MBMessage Local Id: 0x0Message OAB Sequence: 77OAB 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: 101OAB Message Creation Time: 11:36:08.0888AM 03/07/2007OAB Message Last Modification Time: 11:37:11.0605AM 03/07/2007
Message Conversation Topic: \Global Address List - changes.oab - 77Message OAB Name: \Global Address ListMessage OAB DN: /OAB Differential Message classMessage Code Page: 0x4e4Message Size: 244385 BytesMessage Local Id: 0x0Message OAB Sequence: 77OAB 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 CompletedMessage Class Normal found: 3Message Class Differential found: 256Message Class Unknown found: 0Message Attachments found: 0Messages found but unable to read the properties: 0System folders found: 4Highest sequence number found: 1256Lowest sequence number found: 2Biggest attachment found: 0 BytesSmallest attachment found: 36500 BytesBiggest message found: 62 MBSmallest 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.
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: http://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: http://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: http://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 email@example.com, SMTP:firstname.lastname@example.org 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: ErrorEvent Source: MSExchangeSAEvent Category: OAL GeneratorEvent ID: 9325User: AdministratorComputer: OABGen-ServerDescription:OALGen will skip user entry ' Dave Goldman' in address list '\Global AddressList' 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.
Command line arguments: oabinteg /s:srv /t:proxytest /v:2 /l
Checking to see if OABInteg is running on an Exchange ServerChecking version of Exchange ServerExchange 2003 Version: 6.5.6944.00Exchange 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 everythingThe 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=dgoldmanProfile Version: 0x1Profile Type: 0x0
Sort Locale being used by the server is: 1033Code Page being used by the server is 1252Global 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 ListRetrieved 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 GoldmanObject is a mailbox objectLegacyExchangeDN starts with '/o=' or '/O='. Value = /o=microsoft/ou=northamerica/cn=Recipients/cn=dgoldmanPrimary Proxy Address found. Value = email@example.comPrimary Proxy Address has a vaild unicode domain. Value = @microsoft.comSMTP Domain is valid and contains '@'.X500 Address is: X500:/o=microsoft/ou=northamerica/cn=Recipients/cn=dgoldmanProxy Address SMTP:firstname.lastname@example.org is 8 characters. (First 8 characters)Primary Proxy Address found. Value = SMTP:email@example.com.Primary Proxy Address and mail attribute match.Primary Proxy Address = firstname.lastname@example.org, mail attribute = email@example.com.Primary Proxy Address has a valid domain. Value = @microsoft.com
Scan FinishedTotal number of entries processed in the address book: 241004Total number of entries skipped: 0Total number of contacts: 12868Total number of mailboxes: 95214Total number of distribution lists: 131193Total number of groups: 0Total number of folders: 282Total 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: 0Total objects that have a legacyExchangeDN of ADCDisableMail: 1Total objects that have a legacyExchangeDN of ADCDisableMailByADC: 0
OABInteg-Admin_05:04:33 PM profile was found and deleted from the Windows Messaging Subsystem.
c:\OABinteg.txt has been closed.
Performing cleanup.Exiting application.
ExplainationNOTE: 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: http://code.msdn.microsoft.com/oabinteg/Release/ProjectReleases.aspx?ReleaseId=726
OABInteg documentation: http://blogs.msdn.com/dgoldman/archive/2005/08/28/oabinteg-and-how-to-use-it-to-troubleshoot-oab-generation-issues.aspx
Disk Performance Testing with Jetstress 2007 Installing Exchange 2007 into a Small Business Server 2003
As most people know we took down GotDotNet and have relocated most of our external tools and code to