Exchange 2007 SP1 - /recoverCMS and version errors.

When running Exchange 2007 SP1 and the command

setup.com /recoverCMS /cmsName:<NAME> /cmsIPAddress:<IP>

you may receive the following warning:

The installed version of Exchange Server 2007 may be different from the version you are trying to install. The current installed version is '8.1.359.2’, the last installed version was '8.1.240.6'.

In this case the version 8.1.240.6 represents Exchange 2007 SP1.  The version 8.1.359.2 represents Exchange 2007 SP1 RU7. 

One of the pre-req checks for recoverCMS is to warn when the version of Exchange installed on the node where recovery is run does not match the version recorded on the Exchange active directory object. 

The issue here is that when a rollup update is installed the version attribute in active directory is not updated (and this is by design).  For example, here is an LDP dump of an Exchange CMS object and it’s associated version.  Reviewing the serial number attribute you will see Version 8.1 (Build 30240.6).  This translates to Version 8.1.240.6 (combine the version and drop the 30).

Expanding base 'CN=2003-MBX1,CN=Servers,CN=Exchange Administrative Group (FYDIBOHF23SPDLT),CN=Administrative Groups,CN=Microsoft,CN=Microsoft Exchange,CN=Services,CN=Configuration,DC=exchange,DC=msft'...
Result <0>: (null)
Matched DNs:
Getting 1 entries:
>> Dn: CN=2003-MBX1,CN=Servers,CN=Exchange Administrative Group (FYDIBOHF23SPDLT),CN=Administrative Groups,CN=Microsoft,CN=Microsoft Exchange,CN=Services,CN=Configuration,DC=exchange,DC=msft
    3> objectClass: top; server; msExchExchangeServer;
    1> cn: 2003-MBX1;
   1> serialNumber: Version 8.1 (Build 30240.6);
    1> distinguishedName: CN=2003-MBX1,CN=Servers,CN=Exchange Administrative Group (FYDIBOHF23SPDLT),CN=Administrative Groups,CN=Microsoft,CN=Microsoft Exchange,CN=Services,CN=Configuration,DC=exchange,DC=msft;
    1> instanceType: 0x4 = ( IT_WRITE );
    1> whenCreated: 10/01/2008 07:07:30 Eastern Standard Time Eastern Standard Time;
    1> whenChanged: 10/01/2008 07:19:24 Eastern Standard Time Eastern Standard Time;
    1> uSNCreated: 37192;
    1> uSNChanged: 37276;
    1> showInAdvancedViewOnly: TRUE;
    1> adminDisplayName: 2003-MBX1;
    6> networkAddress: ncacn_vns_spp:2003-MBX1; netbios:2003-MBX1; ncacn_np:2003-MBX1; ncacn_spx:2003-MBX1; ncacn_ip_tcp:2003-MBX1.exchange.msft; ncalrpc:2003-MBX1;
    1> name: 2003-MBX1;
    1> objectGUID: d7452d19-806a-43ea-b163-24d265f096d7;
    1> versionNumber: 1912701168;
    1> serverRole: 0;
    1> systemFlags: 0x52000000 = ( FLAG_CONFIG_ALLOW_RENAME | FLAG_CONFIG_ALLOW_LIMITED_MOVE | FLAG_DISALLOW_MOVE_ON_DELETE );
    1> legacyExchangeDN: /o=Microsoft/ou=Exchange Administrative Group (FYDIBOHF23SPDLT)/cn=Configuration/cn=Servers/cn=2003-MBX1;
    1> objectCategory: CN=ms-Exch-Exchange-Server,CN=Schema,CN=Configuration,DC=exchange,DC=msft;
    1> msExchTransportTransientFailureRetryInterval: 300;
    1> msExchTransportMessageRetryInterval: 60;
    1> msExchTransportInternalMaxDSNMessageAttachmentSize: 10485760;
    1> msExchMailboxManagerActivationSchedule: ;
    1> msExchTransportMessageTrackingPath: C:\Program Files\Microsoft\Exchange Server\TransportRoles\Logs\MessageTracking;
    1> msExchTransportMaxConcurrentMailboxSubmissions: 20;
    1> msExchMailboxManagerActivationStyle: 0;
    1> type: <ldp: Binary blob>;
    1> msExchMessageTrackLogFilter: -262145;
    1> msExchMinAdminVersion: -2147453113;
    1> msExchInstallPath: C:\Program Files\Microsoft\Exchange Server;
    1> msExchMailboxManagerAdminMode: 2;
    1> msExchTransportMaxConnectivityLogAge: 2592000;
    1> msExchTransportOutboundConnectionFailureRetryInterval: 600;
    1> msExchTransportMaxPickupDirectoryMessagesPerMinute: 100;
    1> messageTrackingEnabled: FALSE;
    1> msExchServerSite: CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=exchange,DC=msft;
    1> msExchTransportMaxConcurrentMailboxDeliveries: 7;
    1> msExchServerRole: 0;
    1> msExchEdgeSyncAdamSSLPort: 50636;
    1> msExchTransportMaxMessageTrackingDirectorySize: 262144000;
    1> msExchTrkLogCleaningInterval: 7;
    1> msExchTransportDelayNotificationTimeout: 14400;
    1> msExchTransportRoutingLogMaxAge: 604800;
    1> msExchTransportMaxMessageTrackingFileSize: 10485760;
    1> msExchTransportExternalDefaultLanguage: en-US;
    1> msExchResponsibleMTAServer: CN=Microsoft MTA,CN=2003-MBX1,CN=Servers,CN=Exchange Administrative Group (FYDIBOHF23SPDLT),CN=Administrative Groups,CN=Microsoft,CN=Microsoft Exchange,CN=Services,CN=Configuration,DC=exchange,DC=msft;
    1> msExchCurrentServerRoles: 2;
    1> msExchTransportMaxMessageTrackingLogAge: 2592000;
    1> msExchTransportPoisonMessageThreshold: 2;
    1> msExchDataLossForAutoDatabaseMount: 0;
    1> msExchTransportMaxPickupDirectoryHeaderSize: 65536;
    1> msExchTransportMaxPickupDirectoryRecipients: 100;
    1> msExchDataPath: C:\Program Files\Microsoft\Exchange Server\Mailbox;
    1> msExchSmtpReceiveMaxConnectionRatePerMinute: 1200;
    1> msExchTransportMaxQueueIdleTime: 180;
    1> msExchTransportMaxReceiveProtocolLogAge: 2592000;
    1> msExchTransportExternalMaxDSNMessageAttachmentSize: 10485760;
    1> heuristics: 268435456;
    1> msExchTransportFlags: 17401;
    1> msExchMonitoringResources: 2:1:Default Microsoft Exchange Services:MSExchangeSA:MSExchangeMTA:RESvc:SMTPSVC:MSExchangeIS:W3SVC:;
    1> msExchTransportInternalDefaultLanguage: en-US;
    1> msExchELCAuditLogFileAgeLimit: 0;
    1> msExchHomeRoutingGroup: CN=Exchange Routing Group (DWBGZMFD01QNBJR),CN=Routing Groups,CN=Exchange Administrative Group (FYDIBOHF23SPDLT),CN=Administrative Groups,CN=Microsoft,CN=Microsoft Exchange,CN=Services,CN=Configuration,DC=exchange,DC=msft;
    1> msExchTransportMaxSendProtocolLogAge: 2592000;
    1> msExchELCAuditLogFileSizeLimit: 10485760;
    1> msExchELCAuditLogPath: C:\Program Files\Microsoft\Exchange Server\Logging\Managed Folder Assistant;
    1> msExchTransportTransientFailureRetryCount: 6;
    1> msExchTransportMessageExpirationTimeout: 172800;
    1> msExchVersion: 4535486012416;
-----------

Now we know how to determine the Exchange version based on what is stamped in active directory, how do we determine the version of Exchange installed on the machine.  The version of Exchange installed on the machine is determined by the version of ExSETUP.exe installed on the machine.  ExSETUP.exe can be found in X:\Program Files\Microsoft\Exchange Server\BIN (assuming X is the drive where Exchange was installed and that the default path was used).  Here is an example version of ExSETUP.exe.

image

ExSETUP is updated with each rollup that is installed onto the machine. 

Version 8.1.240.6 != 8.1.359.2 or another way of saying it Version 8.1.240.6 ≠ 8.1.359.2 and the error / warning is thrown.

With later version of the XML pre-reqs file this text is a warning.  With prior version of the XML pre-reqs file this is a hard stop error preventing /recoverCMS from completing successfully. 

If you have hit the error condition, and cannot proceed, the following instructions should allow you to continue:

1)  Find and locate ExSETUP.exe in X:\Program Files\Microsoft\Exchange Server\Bin.

2)  Rename the local version of ExSETUP.exe to ExSETUP.exe.original.

3)  From your Exchange installation media, locate the version of ExSETUP.exe.  (Media\Setup\ServerRoles\Common).

4)  Copy this ExSETUP.exe to the bin directory.

5)  Run your setup command and allow it to complete successfully.

6)  When completed, either reinstall the last rollup update applied or delete the copied ExSETUP.exe and rename the original back to ExSETUP.exe.