FSMO Roles ermitteln
Mit dem folgenden Skript können die FSMO (Flexible Single Master
Operation) Inhaber einer Active Directory Domäne ermittelt werden.
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
nur einmal vor.
|
On Error Resume Next
Dim ADOconnObj, strADOquery, oRoot, oRS
Dim oFSM,oCompNTDS, oComp, strDomainDN
Dim fsmoPDC, fsmoRID, fsmoInfra, fsmoSchem, fsmoNam
Set oRoot = GetObject("LDAP://rootDSE")
If Err.Number Then
Print Err.Number, " - Schwerer Fehler
bei oRoot = GetObject()",0
WScript.quit
End If
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
|
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.
Download GetFSMO.vbs
AD - Scripting Basics