Kategorien
Scripte

How to read Active Directory OUs

Hier gelistet ist der Source Code zu der Prozedur Organisationseinheiten (OU) einer Active Directory Struktur ermitteln.

Binäre Darstellung

Hier gelistet ist der Source Code zu der Prozedur Organisationseinheiten (OU) einer Active Directory Struktur ermitteln. Ausgegeben werden die Organisationseinheiten einer Active Directory Struktur. Diese Informationen müsst ihr zuvor der Variablen Domain.Text zuweisen.

Ihr bekommt die Ausgabe in ein Testfeld. Ich denke es ist kein Problem dieses auch in eine Textdatei umzuleiten. Müsstet ihr ergänzen oder die Wahl ermöglichen.

Hier gelistet ist der Source Code zu der Prozedur Organisationseinheiten (OU) einer Active Directory Struktur ermitteln. Ausgegeben werden die Organinsationseinheiten einer Active Directory Struktur.

Die ganze Funktion habe eingebettet in ein VB6 Formular. Dort besteht ein ein eigener Menüpunkt zur Ausführung der Funktion.

Const ADS_SCOPE_SUBTREE = 2
Const ADS_CHASE_REFERRALS_EXTERNAL = 64

' diesen Domänencontroller abfragen:
Kontrollfeld.Text = ""
ldap = "LDAP://" & Domain.Text 'wird aus dem Feld Domain übernommen
Query = "objectCategory='organizationalUnit'"

' Verbindung einrichten:
Set Connection = CreateObject("ADODB.Connection")
Connection.Provider = "ADsDSOObject"
Connection.Open "Active Directory Provider"

' SQL-Befehl initialisieren:
Set Command = CreateObject("ADODB.Command")
Set Command.ActiveConnection = Connection
Command.CommandText = "select AdsPath from_
'" & ldap & "' where " & Query &_
" ORDER BY whenCreated DESC"
Command.Properties("Page Size") = 10000
Command.Properties("Timeout") = 30
Command.Properties("searchscope") =_
ADS_SCOPE_SUBTREE
Command.Properties("Chase referrals") =_
ADS_CHASE_REFERRALS_EXTERNAL
Command.Properties("Cache Results") = False
Set rs = Command.Execute

' Ergebnis anzeigen
If Not rs.EOF Then
    i = 1
    tmp = rs.getString
    Kontrollfeld.Refresh
    Form1.Refresh
    While (InStr(1, tmp, Chr(13))) <> 0
        laenge = Len(tmp)
        komma = InStr(1, tmp, Chr(13))
        OUString(i) = Mid(tmp, 1, komma - 1)
        Kontrollfeld.Text = Kontrollfeld.Text_
        & OUString(i) & vbCrLf
        ListeOU.AddItem OUString(i)
        rest = laenge - komma
        tmp = Right(tmp, rest)
        i = i + 1
        Kontrollfeld.Refresh
        Form1.Refresh
    Wend
Else
    Kontrollfeld.Text = Kontrollfeld.Text & "Keine Ergebnisse..."
End If

Heute nutze ich für deartige Abfragen Powershell.

Das Cmdlet Get-ADOrganizationalUnit ruft ein Organisationseinheitsobjekt (OU) auf oder führt eine Suche durch, um mehrere OUs aufzurufen.

Beispiele:

Alle OUs einer Domain ausgeben.

Get-ADOrganizationalUnit -Filter 'Name -like "*"' | FT Name, DistinguishedName -A

Alle OUs unterhalb einer OU ausgeben.

Get-ADOrganizationalUnit -LDAPFilter '(name=*)' -SearchBase 'OU=YZ,DC=AD,DC=DE' -SearchScope OneLevel | FT Name,Country,PostalCode,City,StreetAddress,State

Ihr seht, da gibt es mehrere Möglichkeiten. Mit Powershell ist auch die Programmierung etwas einfacher.

Die Ausführung bestimmter Tools erfordert spezielle Rechte (administrativer Art). Ich übernehme keinerlei Gewähleistung für evtl. auftretende Schäden. Sie benutzen das Tool auf eigene Gefahr. Bitte sichern Sie zuvor Ihre Daten! Ich übernehme keine Gewähr.

Michael Leidig

Schreiben Sie einen Kommentar

Ihre E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert