|
List FSMO roles
- listFSMORoles.vbs
' FSMO Rollen ermitteln
'
' fsmo_anzeigen.vbs
' http://faq.netzprisma.de/?id=205003
' (v2005090201)
'
' use at own risk ;-)
' Eine FSMO Rolle ermitteln
' Rückgabe: Name des Domain Controllers
Function my_fsmo(str_fsmo_role)
Set objRootDSE = GetObject("LDAP://rootDSE")
Select Case str_fsmo_role
Case "domainnamingmaster":
Set obj_target = GetObject("LDAP://CN=Partitions," & objRootDSE.Get("configurationNamingContext"))
Case "schemamaster":
Set obj_target = GetObject("LDAP://" & objRootDSE.Get("schemaNamingContext"))
Case "pdc":
Set obj_target = GetObject("LDAP://" & objRootDSE.Get("defaultNamingContext"))
Case "rid":
Set obj_target = GetObject("LDAP://CN=RID Manager$,CN=System," & objRootDSE.Get("defaultNamingContext"))
Case "infrastructure":
Set obj_target = GetObject("LDAP://CN=Infrastructure," & objRootDSE.Get("defaultNamingContext"))
Case Else:
my_fsmo="???"
return
End Select
str_current_fsmo = obj_target.Get("fSMORoleOwner")
Set objNtds = GetObject("LDAP://" & str_current_fsmo)
Set objComputer = GetObject(objNtds.Parent)
' Ergebnis in objComputer.Name z.B.: "CN=SRV01"
' -> wir brauchen nur den Servernamen, also ab Pos. #4 im String
my_fsmo = Mid(objComputer.Name,4)
End Function
' Welcher Server hat welche FSAMO Rolle?
my_fsmo_schemamaster = my_fsmo("schemamaster")
my_fsmo_domainnamingmaster = my_fsmo("domainnamingmaster")
my_fsmo_pdc = my_fsmo("pdc")
my_fsmo_rid = my_fsmo("rid")
my_fsmo_infrastructure = my_fsmo("infrastructure")
str_tablestart = vbCrLf & "<blockquote><table border='1' cellpadding='6' cellspacing='0' style='border-collapse: collapse' bordercolor='#555555'>" & vbCrLf
str_tableende = "</table></blockquote>" & vbCrLf & vbCrLf
strErgebnis_HTML_fsmolist = "<h2>FSMO Rollen</h2>" & str_tablestart & _
"<tr><th>FSMO Rolle</th><th>Domain Controller</th></tr>" & _
"<tr><td>Schema Master</td><td>" & my_fsmo_schemamaster & "</td></tr>" & vbCrLf & _
"<tr><td>Domain Naming Master</td><td>" & my_fsmo_domainnamingmaster & "</td></tr>" & vbCrLf & _
"<tr><td>PDC Emulator</td><td>" & my_fsmo_pdc & "</td></tr>" & vbCrLf & _
"<tr><td>RID Master</td><td>" & my_fsmo_rid & "</td></tr>" & vbCrLf & _
"<tr><td>Infrastructure Master</td><td>" & my_fsmo_infrastructure & "</td></tr>" & vbCrLf & _
str_tableende
' Alle Domain Controller dieser Domain durchgehen
Const ADS_SCOPE_SUBTREE = 2
Const NTDSDSA_OPT_IS_GC = 1
Set objConnection = CreateObject("ADODB.Connection")
Set objCommand = CreateObject("ADODB.Command")
objConnection.Provider = "ADsDSOObject"
objConnection.Open "Active Directory Provider"
Set rootDSE=GetObject("LDAP://RootDSE")
DomainContainer = rootDSE.Get("defaultNamingContext")
Set objCOmmand.ActiveConnection = objConnection
objCommand.CommandText = "Select Name, Location " & _
"from 'LDAP://OU=Domain Controllers, " & DomainContainer & "' " & _
"where objectClass='computer'"
objCommand.Properties("Page Size") = 1000
objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE
strErgebnis_HTML_dclist = "<h2>Domain Controller</h2>" & str_tablestart & _
"<tr><th>Domain Controller</th><th>FSMO Rollen</th><th align='center'>GC-Status</th></tr>"
infrastructuremaster_deaktiviert=0 ' wurde ein deaktivierter IM gefunden?
dc_ohne_gc_gefunden=0 ' Sind evtl. alle DCs dieser Domain ein GC?
' Alle Ergebnisse durchgehen
Set objRecordSet = objCommand.Execute
objRecordSet.MoveFirst
Do Until objRecordSet.EOF
strComputer = objRecordSet.Fields("Name").Value
' Ist dieser DC ein GC?
' Spalte mit GC-Information
Set objRootDSE = GetObject("LDAP://" & strComputer & "/rootDSE")
strDsServiceDN = objRootDSE.Get("dsServiceName")
Set objDsRoot = GetObject("LDAP://" & strComputer & "/" & strDsServiceDN)
intOptions = objDsRoot.Get("options")
If intOptions And NTDSDSA_OPT_IS_GC Then
str_ergebnis_current_gc = "<td><center>GC</center></td>" & vbCrLf
ist_gc=1
Else
str_ergebnis_current_gc = "<td><center>-</center></td>" & vbCrLf
ist_gc=0
dc_ohne_gc_gefunden=1
End If
' Spalte mit FSMO Rollen
str_ergebnis_current_fsmo = "<td>"
if (strComputer = my_fsmo_schemamaster) Then _
str_ergebnis_current_fsmo = str_ergebnis_current_fsmo & "Schema Master<br>"
if (strComputer = my_fsmo_domainnamingmaster) Then _
str_ergebnis_current_fsmo = str_ergebnis_current_fsmo & "Domain Naming Master<br>"
if (strComputer = my_fsmo_pdc) Then _
str_ergebnis_current_fsmo = str_ergebnis_current_fsmo & "PDC-Emulator<br>"
if (strComputer = my_fsmo_rid) Then _
str_ergebnis_current_fsmo = str_ergebnis_current_fsmo & "RID-Master<br>"
if (strComputer = my_fsmo_infrastructure) Then
If (ist_gc=0) Then
str_ergebnis_current_fsmo = str_ergebnis_current_fsmo & "Infrastructure-Master<br>"
Else
str_ergebnis_current_fsmo = str_ergebnis_current_fsmo & "<strike>Infrastructure-Master</strike> (*)<br>"
infrastructuremaster_deaktiviert=1
End If
End If
str_ergebnis_current_fsmo = str_ergebnis_current_fsmo & "</td>" & vbCrLf
' strComputer = "SRV01"
' Wscript.Echo "Location: " & objRecordSet.Fields("Location").Value
str_ergebnis_current = "<tr><td><b>" & strComputer & "</b></td>" & _
str_ergebnis_current_fsmo & _
str_ergebnis_current_gc & _
"</tr>" & vbCrLf
' Aktuelles Ergebnis zum Gesamtergebnis hinzufügen
strErgebnis_HTML_dclist = strErgebnis_HTML_dclist & str_ergebnis_current
objRecordSet.MoveNext
Loop
strErgebnis_HTML_dclist = strErgebnis_HTML_dclist & str_tableende
if (infrastructuremaster_deaktiviert=1) Then
If (dc_ohne_gc_gefunden=0) Then
str_alle_dc_sind_gc = "was der Fall ist"
Else
str_alle_dc_sind_gc = "nicht alle DCs dieser Domain sind GC, evtl. die Rolle des Infr.Masters prüfen"
End If
strErgebnis_HTML_dclist = strErgebnis_HTML_dclist & _
"<blockquote><table><tr>" & _
"<td>(*)</td>" & _
"<td>Infrastructure Master deaktiviert, da auf diesem System ein GC eingerichtet ist." & _
"<p>Dies ist kein Problem, wenn:</p>" & _
"<ul><li>Ihr AD aus einer einzelnen Domain besteht oder</li>" & _
"<li>alle DCs dieser Domain als GC konfiguriert sind (" & str_alle_dc_sind_gc & ")</li></ul></td>" & vbCrLf & _
"</tr></table></blockquote>" & vbCrLf
End If
' Gesamtergebnis zusammensetzen
strErgebnis_HTML = "<html>" & vbCrLf & "<head>" & vbCrLf
strErgebnis_HTML = strErgebnis_HTML & "<STYLE type='text/css'>" & vbCrLf _
& "BODY {FONT-SIZE: 9pt; FONT-FAMILY: Arial,verdana; BACKGROUND-COLOR: #ffffff;}" & vbCrLf _
& "H1 {FONT-SIZE: 18pt; FONT-FAMILY: Arial,verdana;margin-top: 50px;}" & vbCrLf _
& "H2 {FONT-SIZE: 14pt; FONT-FAMILY: Arial,verdana;margin-top: 35px;}" & vbCrLf _
& "TD {FONT-SIZE: 9pt; FONT-FAMILY: Arial, verdana;text-align:left; vertical-align:top;}" & vbCrLf _
& "TH {FONT-WEIGHT: bold; FONT-SIZE: 9pt; BACKGROUND: #e0e0e0; FONT-FAMILY: Arial, verdana;text-align:left;}" & vbCrLf _
& "A:link{COLOR: #202080;text-decoration:none;font-weight: bold;}" & vbCrLf _
& "A:visited{COLOR: #202080;text-decoration:none;font-weight: bold;}" & vbCrLf _
& "A:active{COLOR: #202080;text-decoration:none;}" & vbCrLf _
& "A:hover{COLOR: #9090d0;}" & vbCrLf _
& "</STYLE>" & vbCrLf & "</head>" & vbCrLf & "<body>" & vbCrLf
arrDomLevels = Split(DomainContainer, "DC=")
strADsPath = Join(arrDomLevels, "")
strADsPath = Replace(strADsPath, ",", ".")
strErgebnis_HTML = strErgebnis_HTML & "<h1>Domain " & strADsPath & "</h1>" & vbCrLf & vbCrLf
strErgebnis_HTML = strErgebnis_HTML & strErgebnis_HTML_fsmolist
strErgebnis_HTML = strErgebnis_HTML & strErgebnis_HTML_dclist
strErgebnis_HTML = strErgebnis_HTML & vbCrLf & "<hr><center><a href='http://www.netzprisma.de' target='_blank'>www.netzprisma.de</a></center>" & vbCrLf
strErgebnis_HTML = strErgebnis_HTML & vbCrLf & "</body>" & vbCrLf & "</html>" & vbCrLf
' Ergebnis im IE anzeigen
Set objExplorer = CreateObject("InternetExplorer.Application")
objExplorer.Navigate "about:blank"
objExplorer.Visible = 1
objExplorer.document.writeln(strErgebnis_HTML)
objExplorer.Stop
zurück
|
|