Raising the Functional Level

In Windows Server 2003 Active Directory, functional levels have replaced the domain mode that was used in Windows 2000 to signify what operating systems are allowed to run on the domain controllers in the domain. With Windows Server 2003, there are functional levels for both domains and forests, whereas with Windows 2000 the domain mode applied only to domains. But just as with domain modes, changing a functional level is a one-way operation. After you make the change, there is no reverting back (i.e., unless you restore the entire domain or forest).

You should raise the functional level of a domain as soon as possible after installing a new Windows Server 2003 domain or upgrading from Windows 2000 to take advantage of the new features and enhancements. Once all the domains in a forest are at the Windows Server 2003 functional level, you can raise the forest functional level.

Do the following to raise the functional level of a domain:

Using a graphical user interface

  1. Open the Active Directory Domains and Trusts snap-in.
  2. In the left pane, browse to the domain you want to raise, right-click it, and select Raise Domain Functional Level.
  3. Select the new functional level you want to set and click OK.
  4. After a few seconds you should see a message stating whether the operation was successful.

Using a command-line interface

To retrieve the current functional level of a domain, use the following command:

> dsquery *  -scope base -attr msDS-Behavior-Version

Or use the enumprop command found in the Windows 2000 Resource Kit:

> enumprop /ATTR:msDS-Behavior-Version "LDAP://"

To change the functional level to Windows Server 2003, create an LDIF file called raise_domain_func_level.ldf with the following contents:

dn: 
 changetype: modify
 replace: msDS-Behavior-Version
 msDS-Behavior-Version: 2
 -

Next, run the ldifde command to import the change:

> ldifde -i -f raise_domain_func_level.ldf

Using VBScript

' This code changes the functional level of the specified domain to
 ' the Windows Server 2003 domain functional level
 ' ------ SCRIPT CONFIGURATION ------
 strDomain = ""   ' e.g., amer.rallencorp.com
 ' ------ END CONFIGURATION ---------
set objDomain = GetObject("LDAP://" & strDomain)
 objDomain.GetInfo
 if objDomain.Get("msDS-Behavior-Version") <> 2 then
    Wscript.Echo "Changing domain to Windows Server 2003 functional level..."
    objDomain.Put "msDS-Behavior-Version", 2
    objDomain.SetInfo
 else
    Wscript.Echo "Domain already at Windows Server 2003 functional level "
 end if

Do the following to raise the functional level of a forest:

Using a graphical user interface

  1. Open the Active Directory Domains and Trusts snap-in.
  2. In the left pane, right-click on Active Directory Domains and Trusts and select Raise Forest Functional Level.
  3. Select Windows Server 2003 Functional Level and click OK.
  4. After a few seconds you should see a message stating whether the operation was successful.

Using a command-line interface

To retrieve the current forest functional level, use the following command:

> dsquery *  -scope base -attr msDS-Behavior-Version

Or use the enumprop command found in the Windows 2000 Resource Kit:

> enumprop /ATTR:msDS-Behavior-Version "LDAP://"

To change the functional level to Windows Server 2003, create an LDIF file called raise_forest_func_level.ldf with the following contents:

dn: cn=partitions,cn=configuration,
 changetype: modify
 replace: msDS-Behavior-Version
 msDS-Behavior-Version: 2
 -

Next, run the ldifde command to import the change:

> ldifde -i -f raise_forest_func_level.ldf

Using VBScript

' This code changes the functional level of the forest the
 ' user running the script is logged into to Windows Server 2003.
set objRootDSE = GetObject("LDAP://RootDSE")
 set objDomain = GetObject("LDAP://cn=partitions," & _
                            objRootDSE.Get("configurationNamingContext") )
 if objDomain.Get("msDS-Behavior-Version") <> 2 then
    Wscript.Echo "Attempting to change forest to " & _
                 "Windows Server 2003 functional level..."
    objDomain.Put "msDS-Behavior-Version", 2
    objDomain.SetInfo
 else
    Wscript.Echo "Forest already at Windows Server 2003 functional level"
 end if