[Last Call] Learn how to a build a cloud-first strategyRegister Now

  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 860
  • Last Modified:

problem running 'SamUpgradeTask.js' script - receive 'Unexpected Error" message

I have a new Server with Windows 2008 Server.  Installed all OS updates.  Joined a Windows 2003 domain and promoted to DC.  Attempting to install SEP and receive an error indicating that IIS Admin and W3SVC must be installed.  This is a known issue regarding the inability of ACL to resolve to a friendly name on 2008 servers promoted to DC in a 2003 domain, (http://technet.microsoft.com/en-us/library/cc735184.aspx).  I followed the given link, (http://support.microsoft.com/?kbid=946139), copied the script and ran it and received the following error message:

C:\Users\Administrator.MYDOMAIN\Desktop>cscript samupgradetask.js
Microsoft (R) Windows Script Host Version 5.7
Copyright (C) Microsoft Corporation. All rights reserved.

Unexpected error attempting to put the well know GUID.
Error Code: -2147016657
Running upgrade task.
C:\Users\Administrator.MYDOMAIN\Desktop\samupgradetask.js(121, 1) (null): An operations error occured


Line 121 in the script  is 'serverObj.Setinfo()'.
I am unable to find any information related to Error Code: -2147016657

I have restarted the server and attempted SEP installation again to recieve the same message regarding IIS Admin & W3SVC so the issue still exist.  I have checked to verify that the WAS service is running as shown at the bottom of the TechNet article, and it says it is.

Any assistance or information on where to go from here greatly appreciated.
Thank You.
   (c) 2007, Microsoft Corp.
// Check the version of the operating system. Stop the script if the version is earlier than 6.
if ( ! CheckOSVersion() )
    WScript.Echo("ERROR: This script will only work on Longhorn Server or above.");
// Retrieve the local computer's rootDSE LDAP object.
var localRootDse = null;
    localRootDse = GetObject("LDAP://localhost/rootDSE");
    WScript.Echo("There was an error attempting to retrieve the localhost RootDSE object.");
    WScript.Echo("Perhaps this machine is not a Domain Controller on the network?");
    WScript.Echo("ErrorCode: " + e.number);
// Retrieve several rootDSE properties
var dnsHostName = localRootDse.Get("dnsHostName");
var dsServiceName = localRootDse.Get("dsServiceName");
var defaultNamingContext = localRootDse.Get("defaultNamingContext");
// Open the default naming context
var ncObj = GetObject("LDAP://" + defaultNamingContext);
// Get the "FSMO Role Owner"
var strfsmoNtdsa = ncObj.FsmoRoleOwner;
var fsmoNtdsaObj = GetObject("LDAP://" + strfsmoNtdsa);
// Get the parent object of "FSMO Role Owner"
var fsmoServerObj = GetObject(fsmoNtdsaObj.Parent);
// By using the Server Reference, retrieve the name of the PDC computer
var strFsmoComputer = fsmoServerObj.ServerReference;
var fsmoComputerObj = GetObject("LDAP://" + strFsmoComputer);
var pdcName = fsmoComputerObj.Get("name");
// Get the RootDSE object for the PDC
var pdcRootDse = GetObject("LDAP://" + pdcName + "/rootDSE");
// Check whether the PDC is a legacy domain or not.
var domainControllerFunctionality = pdcRootDse.Get("domainControllerFunctionality");
if ( domainControllerFunctionality > 2 )
    WScript.Echo("Domain is already operating in a mode higher than Windows Server 2003 mode. Stopping script execution.");
// Get the default naming context for the PDC
var pdcDefaultNamingContext = pdcRootDse.Get("defaultNamingContext");
// Retrieve the well known object from the PDC
var pdcSystem = GetObject("LDAP://" + pdcName + "/<WKGUID=AB1D30F3768811D1ADED00C04FD8D5CD," + pdcDefaultNamingContext + ">");
// Get the distinguished name for the well known object
var pdcDistinguishedName = pdcSystem.Get("distinguishedName");
// Check whether the task has already been run
var taskMarker = null;
    taskMarker = GetObject("LDAP://" + pdcName + "/<WKGUID=6ACDD74F3F314ae396F62BBE6B2DB961,CN=Server," + pdcDistinguishedName + ">");
    if ( e.number == -2147016656 ) // Check and see if error code is ERROR_DS_NO_SUCH_OBJECT
        taskMarker = null;
        WScript.Echo("Error attempting to retrieve well known object from PDC.");
        WScript.Echo("Name: " + e.name + "\nDescription: " + e.description + "\nCode: " + e.number + "\nMessage: " + e.message);
// If the well known object exists, the SAM upgrade is already running. Therefore, stop the script.
if ( taskMarker != null )
    WScript.Echo("SAM upgrade task already being run. No work done.");
// Get the Server container with that distinguished name
var serverObj = GetObject("LDAP://" + pdcName + "/CN=Server," + pdcDistinguishedName);
// Prepare a safe array (for example, VBArray) with one entry
var jsArray = new Array(1);
jsArray[0] = "B:32:6ACDD74F3F314ae396F62BBE6B2DB961:"+ dsServiceName;
var vbArray = JS2VBArray(jsArray);
    // Append an entry to the "Other-Well-Known-Objects" attribute for the 
    // previous server object.
    serverObj.PutEx(3, "otherWellKnownObjects", vbArray);
    WScript.Echo("Unexpected error attempting to put the well known GUID.");
    WScript.Echo("ErrorCode: " + e.number);
WScript.Echo("Running upgrade task.");
// Set the "runSamUpgradeTasks" attribute in the local rootDSE
localRootDse.Put("runSamUpgradeTasks", 1);
// Remote the binary data from the previous well known object entry 
serverObj.PutEx(4, "otherWellKnownObjects", vbArray);
// The upgrade is complete.
function CheckOSVersion()
    var wbemFlagReturnImmediately = 0x10;
    var wbemFlagForwardOnly = 0x20;
    var objWMIService = GetObject("winmgmts:\\\\.\\root\\CIMV2");
    var colItems = objWMIService.ExecQuery("SELECT * FROM Win32_OperatingSystem", "WQL",
                                      wbemFlagReturnImmediately | wbemFlagForwardOnly);
    var enumItems = new Enumerator(colItems);
    for (; !enumItems.atEnd(); enumItems.moveNext()) {
        var objItem = enumItems.item();
        var fullVersion = objItem.Version;
        var indexPoint = fullVersion.indexOf(".");
        if ( indexPoint == -1 )
            return false;
        var majorVersion = fullVersion.substring(0, indexPoint);
        return (majorVersion >= "6");
    return false;
function JS2VBArray( objJSArray )
    var dictionary = new ActiveXObject( "Scripting.Dictionary" );
    for ( var i = 0; i < objJSArray.length; i++ )
        dictionary.add( i, objJSArray[ i ] );
    return dictionary.Items();

Open in new window

1 Solution
L-HAuthor Commented:
Well, I modified the script to display e.message and ran again, and the error didn't occur.  I have to guess it had to do with replication over the night as I didn't change anything.  So this question is no longer valid.  Even though I've still got the installation issue.  Cheers.

Featured Post

Free Tool: Subnet Calculator

The subnet calculator helps you design networks by taking an IP address and network mask and returning information such as network, broadcast address, and host range.

One of a set of tools we're offering as a way of saying thank you for being a part of the community.

Tackle projects and never again get stuck behind a technical roadblock.
Join Now