Recipe 17.5 Finding the Application Partitions Hosted by a Server

17.5.1 Problem

You want to find the application partitions that a particular server replicates. Before you decommission a server, it is good to check to see if it hosts any application partitions and if so, add another replica server to replace it.

17.5.2 Solution Using a graphical user interface
  1. Open LDP.

  2. From the menu, select Connection Connect.

  3. For Server, enter the name of a DC.

  4. For Port, enter 389.

  5. Click OK.

  6. From the menu, select Connection Bind.

  7. Enter a user and password with the necessary credentials.

  8. Click OK.

  9. From the menu, select Browse Search.

  10. For BaseDN, type the DN of the Partitions container (e.g., cn=partitions,cn=configuration,dc=rallencorp, dc=com).

  11. For Filter, enter:

    (msDS-NC-Replica-Locations=cn=NTDS Settings,cn=<DomainControllerName>,
    cn=servers,cn=<SiteName>,cn=sites, cn=configuration,<ForestDN>))
  12. For Scope, select One Level.

  13. Click the Options button.

  14. For Attributes, type dnsRoot.

  15. Click OK.

  16. Click Run. Using a command-line interface

Use the following command to find all of the application partitions hosted by a domain controller. To run this command, you need the distinguished name of the forest root domain (<ForestDN>), the common name of the DC's server object (<DomainControllerName>), and the common name of the site object the server is in (<SiteName>).

> dsquery * "cn=partitions,cn=configuration,<ForestDN>" -scope onelevel -attr[RETURN]
dnsRoot -filter "(&(objectcategory=crossRef)(systemFlags:1.2.840.113556.1.4.803:=5)[RETURN]
(msDS-NC-Replica-Locations=cn=NTDS Settings,cn=<DomainControllerName>,[RETURN]
cn=servers,cn=<SiteName>,cn=sites, cn=configuration,<ForestDN>))" Using VBScript
' This code finds the application partitions hosted by the specified server.
' Hostname of server to add as replica for app partition. 
' This needs to match the common name for the DC's server object.
strServer  = "<DomainControllerName>"  ' e.g. dc01
' ------ END CONFIGURATION ---------

' ----------------------------------------------------------
' First need to find the NTDS Settings object for the server
' ----------------------------------------------------------
set objRootDSE = GetObject("LDAP://RootDSE")
strBase    =  "<LDAP://cn=Sites," & _
              objRootDSE.Get("ConfigurationNamingContext") & ">;"
strFilter  = "(&(objectcategory=server)(cn=" & strServer & "));" 
strAttrs   = "cn,distinguishedName;"
strScope   = "subtree"
set objConn = CreateObject("ADODB.Connection")
objConn.Provider = "ADsDSOObject"
objConn.Open "Active Directory Provider"
set objRS = objConn.Execute(strBase & strFilter & strAttrs & strScope)
if objRS.RecordCount <> 1 then
   WScript.Echo "Did not find a match for server " & strServer
   strServerDN = "cn=NTDS Settings," & _
   Wscript.Echo "Found server object: "
   WScript.Echo strServerDN
end if

' ------------------------------------------------------------------
' Find the crossRef objects that are hosted by the server
' ------------------------------------------------------------------
strBase = "<LDAP://cn=Partitions," & _
          objRootDSE.Get("ConfigurationNamingContext") & ">;"
strFilter  = "(&(objectcategory=crossRef)" & _
             "(msDS-NC-Replica-Locations=" & strServerDN & "));" 
strAttrs   = "nCName;"
strScope   = "onelevel"
set objRS = objConn.Execute(strBase & strFilter & strAttrs & strScope)
if objRS.RecordCount = 0 then
   WScript.Echo "Server " & strServer & _
                " does not host any application partitions"
   Wscript.Echo "App partitions hosted by server " & strServer & ": "
   while not objRS.EOF
      WScript.Echo " " & objRS.Fields("nCName").Value
end if

17.5.3 Discussion

As described in Recipe 17.3 and Recipe 17.4, the msDS-NC-Replica-Locations attribute on crossRef objects contains the list of replica servers for a given application partition. Each of the solutions illustrates how to perform a query using this attribute to locate all of the application partitions a particular domain controller is a replica server for. For the GUI and CLI solutions, you need to know the distinguished name of the nTDSDSA object for the target domain controller. The VBScript solution tries to dynamically determine the distinguished name given a server name.

17.5.4 See Also

Recipe 17.4 for finding the replica servers for an application partition

    Chapter 3. Domain Controllers, Global Catalogs, and FSMOs
    Chapter 6. Users
    Appendix A. Tool List