The ManagementServerConfigTool fails to correctly promote a Management Server to an RMS in System Center Operations Manager 2007

The ManagementServerConfigTool will fail to promote a management server to Root Management Server (RMS) in the following two scenarios. You should read the information below and take the necessary steps to avoid being impacted by these issues should you need to run the tool at a future time.

Scenario 1
In a Management Group which has the Reporting components installed, if you attempt to run the following command while the original RMS is offline it will fail to complete successfully:

ManagementServerConfigTool PromoteRMS /deleteexistingrms:true 

You will also see an error similar to the following in the ManagementServerConfigTool.log:

Adjusting DW old RMS: ROOTMANAGEMENTSERVER.domain.tld new RMS: MANAGEMENTSERVER.domain.tld
Index was out of range. Must be non-negative and less than the size of the collection.
Parameter name: index.

Scenario 2
If the file path to the management packs on the RMS, from the management server you are promoting exceeds 260 characters in length and you run the following command while the original RMS is online it will fail to complete successfully:

ManagementServerConfigTool PromoteRMS

You will see an error similar to this in the ManagementServerConfigTool.log:

Failed to demote old RMS with the following error:

Could not find a part of the path 'Microsoft.SystemCenter.DataWarehouse.Report.Library.{691D7B61-3463-A5C1-5038-55DD1CDD91C4}.{12265F42-86C1-AF6-39DD-BC6CFB49AB38}.xml'

More Information

Scenario 1
To avoid this problem, do not use the /deleteexistingrms:trueswitch. Instead, to achieve the same outcome run the following to promote the management server to an RMS:

ManagementServerConfigTool PromoteRMS

Once that has completed successfully, delete the old RMS object from the management group using the Operations Manager console.

Scenario 2
Determining if this problem affects you can be done by checking whether the maxpath to any MP is greater than 260 characters. To do this manually add the number of characters for the following components:

- File path to ..\System Center Operations Manager 2007\Health Service State\ Management Packs\
- The longest file in the above directory

Alternatively, you can simply run the Powershell script below on the Managements Server:

$fqdn = (get-wmiobject Win32_computersystem).DNSHostname + "." + (get-wmiobject Win32_computersystem).Domain
$mpdpath = (Get-ItemProperty -path "HKLM:\SYSTEM\CurrentControlSet\services\HealthService\Parameters\")."State Directory" + "\Management Packs\"
$maxpath = 0

foreach( $filename in Get-ChildItem $mpdpath)
$fullpath = '\\' + $fqdn + '\'  + $filename.FullName
if( $fullpath.Length -gt $maxpath )
{ $maxpath = $fullpath.length}
"MaxPath = $maxpath"

If the Maxpath it returns is greater than 260, you should move the Health Service State folder to avoid this problem, and you should do this on all management servers in your management group that could possibly ever be promoted to an RMS.

In order to move the Health Service State folder structure to a shorter path, perform the following steps:   

1. Stop the following services if they are running on the server - OpsMgr Health Service/System Center Management, OpsMgr Config Service/System Center Configuration, OpsMgr SDK Service/System Center Data Access.

2. Create on the destination volume the directory you want to move the Health Service State directory to, or choose to use the root directory of a volume(e.g. D:\)to best avoid the problem.

3. Move the source "%ProgramFiles%\System Center Operations Manager 2007\Health Service State" directory to the destination folder you chose in Step 2.

4. Verify the ACL permissions are at a minimum, set to Administrators (Full Control) and System (Full Control) on the directory and sub-directories.

Warning: Editing the Registry incorrectly can result in your operating system or applications failing to function normally. Be sure you backup the system before you proceed with this step.

5. Open the Registry Editor and under HKLM\System\CurrentControlSet\Services\HealthService\Parameters key modify the following value "State Directory" with the destination path you have moved the source to.  

6. Close the Registry Editor.

7. Restart the services you stopped in Step 1.

8. Open the Event Log and in the Operations Manager Event View, verify there are no errors from the source Health Service, Health Service Modules, and Health Service ESE Store.