List domain hierarchy (VBScript)

This code can be found in Chapter 2 of Active Directory Cookbook, 2nd edition

Purchase XP Cookbook or Networking Recipes for only $25 plus shipping! While supplies last.

Find out how to download all of the VBScript code from this site.

' This VBScript code prints the hierarchy of domains in a forest.
' The method I used is a little convoluted, but then again so is VBScript.

' ---------------------------------------------------------------
' Provided as a web-only addition for the book:
'     "Active Directory Cookbook" by Robbie Allen
' Publisher: O'Reilly and Associates
' ISBN: 0-596-00466-4
' Book web site: http://rallenhome.com/books/adcookbook/code.html
' ---------------------------------------------------------------

' This code prints out the forest tree hierarchy

set objRootDSE = GetObject("LDAP://RootDSE")
strBase    =  "<LDAP://cn=Partitions," & _
              objRootDSE.Get("ConfigurationNamingContext") & ">;"
strFilter  = "(&(objectcategory=crossRef)(systemFlags=3));"
strAttrs   = "name,trustParent,distinguishedName;"
strScope   = "onelevel"

set objConn = CreateObject("ADODB.Connection")
objConn.Provider = "ADsDSOObject"
objConn.Open "Active Directory Provider"
set objRS = objConn.Execute(strBase & strFilter & strAttrs & strScope)
objRS.MoveFirst

set dicSubDomainTrue = CreateObject("Scripting.Dictionary")
set dicDomainHierarchy = CreateObject("Scripting.Dictionary")
while not objRS.EOF 
   if objRS.Fields("trustParent").Value <> "" then
      dicSubDomainTrue.Add objRS.Fields("name").Value, 0
      set objDomainParent = GetObject("LDAP://" & objRS.Fields("trustParent").Value)
      dicDomainHierarchy.Add objRS.Fields("name").Value, objDomainParent.Get("name")
   else 
      dicSubDomainTrue.Add objRS.Fields("name").Value, 1
   end if
   objRS.MoveNext
wend

for each strDomain in dicSubDomainTrue
  if dicSubDomainTrue(strDomain) = 1 then
      DisplayDomains strDomain, "", dicDomainHierarchy
  end if 
next


Function DisplayDomains ( strDomain, strSpaces, dicDomainHierachy  )

   WScript.Echo strSpaces & strDomain
   for each strD in dicDomainHierarchy
      if dicDomainHierarchy(strD) = strDomain then
         DisplayDomains strD, "  " & strSpaces, dicDomainHierarchy
      end if
   next

End Function

This code has been viewed 5127 times.

New from the creators of TechTasks.com: StatSheet.com