Wie man eine Liste von Domains in Ihrem Netzwerk mit der Windows API erhält

Wenn Sie ein Netzwerkadministrator oder ein Entwickler sind, der mit Active Directory arbeitet, müssen Sie möglicherweise häufig eine Liste der in Ihrem Netzwerk vorhandenen Domains abrufen. Ob zur Überwachung, Verwaltung von Ressourcen oder zur Sicherstellung ordnungsgemäßer Sicherheitsprotokolle, der Zugriff auf Informationen zu Domains ist unerlässlich. In diesem Blogbeitrag erklären wir, wie Sie diese Aufgabe mit der Windows API und LDAP-Abfragen ausführen können.

Das Problem verstehen

Um eine Liste aller Domains in Ihrem Netzwerk zu erhalten, müssen Sie typischerweise mit dem Active Directory interagieren. Die Herausforderung besteht darin, das richtige Protokoll und die richtigen Abfragen zu verwenden, um diese Informationen effektiv zu extrahieren. Glücklicherweise kann die Aufgabe mit nur ein wenig Skripting erledigt werden!

Die Lösung

Verwendung von VBScript mit LDAP-Abfragen

Eine der effizientesten Möglichkeiten, um Domaininformationen abzurufen, ist die Verwendung von VBScript in Kombination mit LDAP (Lightweight Directory Access Protocol) Abfragen. Im Folgenden leiten wir Sie durch ein Beispielskript, das auf jedem mit dem Netzwerk verbundenen Computer ausgeführt werden kann, auf dem Active Directory verwendet wird.

Beispiel VBScript-Code

Hier ist das Skript, das Sie verwenden können, um die Liste der Domains abzurufen:

' Dieses VBScript-Code erhält die Liste der in der 
' Gesamtstruktur enthaltenen Domains, in die der Benutzer, 
' der das Skript ausführt, eingeloggt ist

' ---------------------------------------------------------------
' Aus dem Buch "Active Directory Cookbook" von Robbie Allen
' Verlag: O'Reilly and Associates
' ISBN: 0-596-00466-4
' Buch-Webseite: http://rallenhome.com/books/adcookbook/code.html
' ---------------------------------------------------------------

set objRootDSE = GetObject("LDAP://RootDSE")
strADsPath =  "<GC://" & objRootDSE.Get("rootDomainNamingContext") & ">;;"
strFilter  = "(objectcategory=domainDNS);"
strAttrs   = "name;"
strScope   = "SubTree"

set objConn = CreateObject("ADODB.Connection")
objConn.Provider = "ADsDSOObject"
objConn.Open "Active Directory Provider"
set objRS = objConn.Execute(strADsPath & strFilter & strAttrs & strScope)
objRS.MoveFirst
while Not objRS.EOF
    Wscript.Echo objRS.Fields(0).Value
    objRS.MoveNext
wend

Aufschlüsselung des Skripts

  1. LDAP-Verbindung initialisieren:

    • Das Skript beginnt damit, eine Referenz auf die Wurzel des Verzeichnisses zu erhalten.
    • GetObject("LDAP://RootDSE") ruft die Wurzel des Verzeichnisses ab.
  2. Pfad und Abfragefilter festlegen:

    • strADsPath: Dieser legt den Pfad für den Domain-Naming-Kontext fest.
    • strFilter: Legt die Art der Objekte fest, nach denen gesucht werden soll; in diesem Fall nur Domains.
  3. Verbindung herstellen:

    • Die Verbindung zu Active Directory wird mit ADODB.Connection hergestellt.
  4. Abfrage ausführen:

    • Die Active Directory-Abfrage wird ausgeführt, und die Ergebnisse werden in einem Recordset-Objekt gespeichert.
  5. Ergebnisse anzeigen:

    • Das Skript durchläuft das Recordset und zeigt jeden Domainnamen an, bis alle Einträge angezeigt wurden.

Zusätzliche Ressourcen

Für diejenigen, die lieber in der C#-Umgebung arbeiten, ist diese C#-Version ebenfalls verfügbar. Diese Alternative kann ähnliche Ergebnisse liefern, jedoch mit möglicherweise unterschiedlichen Implementierungsüberlegungen.

Fazit

Das Abrufen einer Liste von Domains in Ihrem Netzwerk ist ein einfacher Prozess, wenn Sie die Windows API zusammen mit LDAP-Abfragen nutzen. Mit dem bereitgestellten VBScript-Code können Sie schnell und effektiv die erforderlichen Daten sammeln und Ihre Fähigkeit zur Verwaltung von Active Directory-Ressourcen verbessern. Wenn Sie nach zusätzlicher Leistung oder Funktionen suchen, sollten Sie die C#-Alternative in Betracht ziehen, um eine robustere Lösung zu erhalten.

Jetzt sind Sie mit den Tools ausgestattet, um die Domains Ihres Netzwerks effizient zu verwalten. Probieren Sie aus, den obigen Code zu implementieren, und Sie werden sehen, wie leistungsfähig Skripting im Netzwerkmanagement sein kann!