Exchange 2010 Installation Fails with Event ID 5023 and 5003 MSExchangeTransport

This was really weird for me to see but I was installing Exchange 2010 Hub Transport and Mailbox Server Role on the same box today and I faced a setup failure a couple of times. Assuming that it would run correctly next time I uninstalled and reinstalled it too. But, it didn’t seem to help.

Here is what happened during install:

HT Sever role failed to install and when I reviewed the application logs I got some series of errors like below:

Log Name:      Application
Source:        MSExchangeTransport
Date:          5/21/2010 11:57:41 AM
Event ID:      5003
Task Category: Routing
Level:         Error
Keywords:      Classic
User:          N/A
Microsoft Exchange couldn’t load configuration information for routing. The process will block and retry the operation in 10 seconds.

Log Name:      Application
Source:        MSExchangeTransport
Date:          5/21/2010 11:57:51 AM
Event ID:      5023
Task Category: Routing
Level:         Error
Keywords:      Classic
User:          N/A
A transient configuration error was detected while the routing configuration was loading. Exception details: Unable to determine the local Active Directory site : Microsoft.Exchange.Transport.Categorizer.TransientRoutingException: Unable to determine the local Active Directory site
   at Microsoft.Exchange.Transport.Categorizer.AdSiteRelayMap.ValidateConfig(ExchangeTopology topology, ExEventLog eventLogger, DateTime timestamp)
   at Microsoft.Exchange.Transport.Categorizer.RoutingTables.ValidateConfig(RawRoutingConfigData rawConfigData)
   at Microsoft.Exchange.Transport.Categorizer.RoutingTables.PopulateTables(RawRoutingConfigData rawConfigData)

and ExchangeSetup.log showed some entries like below:

[05/21/2010 13:34:56.0667] [2] Service checkpoint has progressed. Previous checkpoint=’0′ – Current checkpoint=’1′.
[05/21/2010 13:34:56.0667] [2] Will wait ‘90000’ milliseconds for the service ‘MSExchangeTransport’ to reach status ‘Running’.
[05/21/2010 13:36:26.0839] [2] Service ‘MSExchangeTransport’ failed to reach status ‘Running’ on this server after waiting for ‘90000’ milliseconds.
[05/21/2010 13:36:26.0839] [2] The remaining time for service status change is ’00:13:05′.
[05/21/2010 13:36:26.0839] [2] [WARNING] Service checkpoint has not progressed. Previous checkpoint=’1′- Current checkpoint=’1′.
[05/21/2010 13:36:26.0839] [2] Previous service status query time is ‘5/21/2010 9:34:56 AM’.
[05/21/2010 13:36:26.0839] [2] Current service status query time is ‘5/21/2010 9:36:26 AM’.
[05/21/2010 13:36:26.0839] [2] Will wait ‘90000’ milliseconds for the service ‘MSExchangeTransport’ to reach status ‘Running’.
[05/21/2010 13:37:57.0012] [2] Service ‘MSExchangeTransport’ failed to reach status ‘Running’ on this server after waiting for ‘90000’ milliseconds.
[05/21/2010 13:37:57.0012] [2] The remaining time for service status change is ’00:11:35′.
[05/21/2010 13:37:57.0012] [2] Service ‘MSExchangeTransport’ failed to start. Check the event log for possible reasons for the service start failure.
[05/21/2010 13:37:57.0012] [2] [ERROR] Unexpected Error
[05/21/2010 13:37:57.0012] [2] [ERROR] Service ‘MSExchangeTransport’ failed to start. Check the event log for possible reasons for the service start failure.
[05/21/2010 13:37:57.0012] [2] Ending processing.
[05/21/2010 13:37:57.0012] [1] The following 1 error(s) occurred during task execution:
[05/21/2010 13:37:57.0012] [1] 0.  ErrorRecord: Service ‘MSExchangeTransport’ failed to start. Check the event log for possible reasons for the service start failure. 
After doing some research and reading on internet I found a resolution to this. The cause of the problem is that the msExchServerSite attribute on the server object does not get updated automatically and the Microsoft Exchange Service Fails to start. Just because the service fails to start in the way it is expected to setup thinks that it did not complete and stops installing everything else.

Fix to this problem:

Is not really a very convenient way in fact so I would call it a work around instead of a FIX.

1. I used SMS Trace utility to monitor the progress of setup. This is shipped with SCCM Resource Kit and indeed is a great utility to monitor .log files in real time.

2. Opened ExchangeSetup.log file and continued monitoring it. Before the setup could reach the stage where above entries are logged in the setup log I opened ADSIEDIT and did following:

a. Browsed to location: CN=USA,CN=Sites,CN=Configuration,DC=exchange,DC=local

b. Copied the distinguishedName value of the site and pasted it in a notepad.

c. Again browsed to location: CN=Servers,CN=Exchange Administrative Group (FYDIBOHF23SPDLT),CN=Administrative Groups,CN=Exchange,CN=Microsoft Exchange,CN=Services,CN=Configuration,DC=exchange,DC=local

d. Kept refreshing this location until my Exchange 2010 HT server name papered there. The moment it appeared I did the below steps real quick.

e. Opened Properties and located attribute: msExchServerSite

f. Double clicked on the attribute and pasted the value that I copied from site distinguishedName.

After investigating it further the problem turned out to be with AD. You must have the replication working correctly indeed but also the AD sites should also have correct configuration. Site configuration must contain correct subnets associated with it as well at least one GC in the site where you are installing the Exchange 2010 HT server role.


How to add Employee Numbers in ADUC and Exchange GAL

Some companies need to use AD to store their Employee Numbers or Employee IDs but due to limitations in ADUC MMC most of the people don’t tend to do this.

I am not very sure how frequently some company needs this but one of my friend needed it for sure. 🙂 I did this in my labs few months ago and worked on at least 3 production environments too. I thought I can share this with everyone who reads at my blog. However, the steps I am going to show in this blog post will only apply to Exchange 2007 and Exchange 2010 GAL. Also, the templates editor tool that we are going to use does not show Employee ID field in the bindings page.

There are few steps involved in doing this:

  1. A simple VB script stored at some location on network.
  2. Schema Admin group membership to the user account you are going to carry out this operation with.
  3. Exchange Organization Administrator group membership.

Using the Visual Basic Script

  • Copy and Paste the below text in a notepad file and save it as .vbs

On Error Resume Next
Dim objemployeeID
Dim objUser
Dim ObjTemp
Set objemployeeID = Wscript.Arguments
Set objUser = GetObject(objemployeeID(0))
objTemp = InputBox("Current Employee ID: "& objUser.employeeNumber & "If you would like to enter a new number of modify the exisitng number, enter the new number in the textbox below")
if objTemp <> "" then objUser.Put"employeeNumber",objTemp
If Err.Number = "-2147024891" Then
MsgBox "Your current account does not have permissions to modify the Employee-ID attribute. Please log on with an account with appropriate permissions.",16,"Permission Denied"
End If
Set ObjUser = Nothing
Set objemployeeID = Nothing
Set objTemp = Nothing

  • Rename this file to .vbs and store at some network share e.g. \servernameADScriptsEmpID.vbs . The only idea behind storing this script on a network location is to keep this available even the ADUC is used from client computers.

Editing Schema and User Display Configurations in AD configuration partition:

Warning: It is highly recommended that you back up your Active Directory before modifying anything in schema. Incorrect changes in schema can cause undesired behavior of Active Directory Services.

  • Logon to any domain controller with Schema Admin privileges.
  • Click Start –> Run and type regsvr32 schmmgmt.dll and hit enter.
  • Click OK on the information dialog that appears on the screen
  • Click Start –> Run and type MMC and press enter.
  • In MMC click File menu and select Add/Remove Snap-In.
  • Click on Add button on Add/Remove Snap-in page.
  • Select Active Directory Schema from the list that appears on the screen.
  • Click Add and click Close and click Close.
  • Expand Classes in Active Directory Schema Snap-in and locate class person.
  • Right click on class person, select Properties and click on Attributes tab.


  • Click on Add button and select employeeID


  • Repeat above step to add employeeNumber as well.
  • Now open ADSIEDIT.MSC and locate CN=user-Display,CN=409,CN=DisplaySpecifiers,CN=Configuration,DC=domain,DC=com
  • Right click on CN=user-Display and select Properties.
  • Locate the attribute adminContextMenu on Attribute Editor page and click Edit button.
  • Type ,&Employee-ID,\adpun3AD ScriptsEmpID.vbs exactly as shown in figure below and click Add button. (I recommend copy and paste the text in red color)


  • Click OK button and exit the ADSIEDIT.msc
  • Now open Active Directory Users and Computers and locate the user account you want to modify the Employee ID for. You will see an additional context menu item in when you right click on the desired user object.


  • A new pop up appears when you click the above context menu. You can enter or modify the Employee ID for the select user account using the the pop up.


Adding Employee ID field in Exchange 2007 Global Address List

  • Now to make this Employee ID field visible in Exchange 2007 Global Address list you can use Details Templates Editor tool from Exchange 2007 EMC.
  • Logon to your Exchange 2007 Server with Organization Administrator and open Exchange Management Console.
  • Locate and Open Details Templates Editor Tool from Toolbox node in EMC.
  • Locate the template for User type and Language English (United States) and click Edit from Actions pane. Refer below figure.


  • A new Editor Opens on the screen. Select a Label and a Edit controls from Tools pane in the opened Editor window and place them at your desired location.


  • Add details to the Label control using property editor pane in the editor tool. To do this, select The Label control that you just dragged and dropped on the template and add the text in properties pane.


  • Add details to Edit control and bind it to specific attribute in AD. To do this, select the Listbox control and select Employee ID attribute from Properties pane.


  • Save the edited template by selecting File Menu and Save.
  • Exchange GAL will show the details as shown below. If you are using outlook in cached mode then you will have to wait till the OAB is generated.


I hope you find this useful and can use when you require this. Do let me know if you have any comments on the post.