You need to determine the site of which a domain controller is a member.
Open LDP and from the menu, select Connection Connect.
For Server, enter the name of a domain controller (or leave blank to do a serverless bind).
For Port, enter 389.
From the menu select Connection Bind.
Enter credentials of a domain user.
From the menu, select Browse Search.
For BaseDN, type the distinguished name of the Sites container (e.g., cn=sites,cn=configuration,dc=rallencorp, dc=com).
For Scope, select Subtree.
For Filter, enter:
> nltest /dsgetsite /server:<DomainControllerName>
' This code prints the site the specified domain controller is in ' ------ SCRIPT CONFIGURATION ------ strDC = "<DomainControllerName>" ' e.g. dc1.rallencorp.com ' ------ END CONFIGURATION --------- set objRootDSE = GetObject("LDAP://" & strDC & "/RootDSE") set objNTDS = GetObject("LDAP://" & objRootDSE.Get("dsServiceName")) set objSite = GetObject(GetObject(GetObject(objNTDS.Parent).Parent).Parent) WScript.Echo objSite.Get("cn")
Domain controllers are represented in the site topology by a server object and a child nTDSDSA object. Actually, any type of server can conceivably have a server object; it is the nTDSDSA object that differentiates domain controllers from other types of servers. You'll often see the nTDSDSA object of a domain controller used to refer to that domain controller elsewhere in Active Directory. For example, the fSMORoleOwner attribute that represents the FSMO owners contains the distinguished name of the nTDSDSA object of the domain controller that is holding the role.
The nltest /dsgetsite command is a wrapper around the DsGetSiteName method.
Since we cannot use the DsGetSiteName method directly in VBScript, we need to take a more indirect approach. By querying the RootDSE of the target server, we can retrieve the dsServiceName attribute. That attribute contains the DN of the nTDSDSA object for the domain controller; for example, cn=NTDSSettings,cn=dc1,cn=MySite,cn=Sites,cn=Configuration,dc=rallencorp,dc=com. Then, by calling the Parent method three consecutive times, we can retrieve the object for cn=MySite,cn=Sites,cn=Configuration,dc=rallencorp,dc=com.