FSMO Rollen ermitteln

Mit dem folgenden Skript können die FSMO (Flexible Single Master Operation) Inhaber einer Active Directory Domäne ermittelt werden

 strDomainDN = oRoot.Get("defaultNamingContext")
 strDomainDN = InputBox("FSMO Roles for Domain:","LDAP-strDomainDN",strDomainDN)
 WScript.echo "Ermittle FSMO-Rollen für " & strDomainDN & VbCrLf
 Set ADOconnObj = CreateObject("ADODB.Connection")
 ADOconnObj.Provider = "ADSDSOObject"
 ADOconnObj.Open "ADs Provider"
 '*** PDC FSMO ***
 strADOquery = "<LDAP://" & strDomainDN & ">;(&(objectClass=domainDNS)(fSMORoleOwner=*));adsPath;subtree"
 fsmoPDC = "PDC: " & GetRoleOwner(strADOquery) & vbCRLF
 '*** Rid FSMO ***
 strADOquery = "<LDAP://" & strDomainDN & ">;(&(objectClass=rIDManager)(fSMORoleOwner=*));adsPath;subtree"
 fsmoRID = "RID: " & GetRoleOwner(strADOquery) & vbCRLF
 '*** Infrastructure FSMO ***
 strADOquery = "<LDAP://" & strDomainDN & ">;(&(objectClass=infrastructureUpdate)(FSMORoleOwner=*));adsPath;subtree"
 fsmoInfra = "Infra: " & GetRoleOwner(strADOquery) & vbCRLF
 '*** Schema FSMO ***
 strADOquery = "<LDAP://" & oRoot.Get("schemaNamingContext") & ">;(&(objectClass=dMD)(fSMORoleOwner=*));adsPath;subtree"
 fsmoSchem = "Schema: " & GetRoleOwner(strADOquery) & vbCRLF
 '*** Domain Naming FSMO ***
 strADOquery = "<LDAP://" & oRoot.Get("configurationNamingContext") & ">;(& _
      (objectClass=crossRefContainer)(fSMORoleOwner=*));adsPath;subtree"
 fsmoNam = "Naming: " & GetRoleOwner(strADOquery) & vbCRLF
 MsgBox fsmoPDC & fsmoRID & fsmoInfra & fsmoSchem & fsmoNam,0 ,"FSMO-Roles for " & strDomainDN
 '****************************
 '* Function GetRoleOwner()
 '* Purpose:    FSMO Rolle holen
 '* Input:    ADO Query String
 '* Output:    Hostname of Server
 '****************************
 Function GetRoleOwner(ByVal strADOquery)
     On Error Resume Next
     Set oRS = ADOconnObj.Execute(strADOquery)
     Set oFSM = GetObject(oRS.Fields(0).Value)
     Set oCompNTDS = GetObject("LDAP://" & oFSM.fSMORoleOwner)
     Set oComp = GetObject(oCompNTDS.Parent)
     GetRoleOwner = oComp.dnsHostName
 End Function
 
Die FSMO Rollen "Schema Master" und "Domain Naming Master" kommen in jeder AD Gesamtstruktur insgesamt nur einmal vor. Die FSMO Rollen "PDC Emulator", "RID Master" und "Infrastructure Master" kommen in jeder AD Domäne innerhalb der Gesamtstruktur je einmal vor.
 
Die Variable oRoot haben wir uns mit der Funktion GetDomainDN() geholt.
Dieses komplette lauffähige Skript nutzt ADO (ActiveX Data Object), um Active Directory Informationen über die FSMO Rollen zu bekommen. Ein ADO Querystring entspricht in der Syntax einer SQL Abfrage.