Active Directory

  • VB.NET

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von MichaHo.

    Active Directory

    Hallo,
    dieses Thema gibts hier schon ähnlich, aber wie viele ist diese unbeantwortet. Stelle deswegen meine genau.

    Versuche hiermit die User einer Bestimmten Gruppe via AD zu bekommen, aber es funktioniert nicht.

    VB.NET-Quellcode

    1. Dim objRootDSE As New DirectoryEntry("LDAP://RootDSE")
    2. Dim dom = objRootDSE.Properties("DefaultNamingContext").Value.ToString()
    3. Dim ds As DirectorySearcher = New DirectorySearcher("LDAP://" & dom)
    4. ds.SearchScope = DirectoryServices.SearchScope.Subtree
    5. ds.Filter = "(&(objectCategory=person)(objectClass=user)(memberof=cn=verwalt))"
    6. ds.PropertiesToLoad.Add("name")
    7. Dim SearchResults As SearchResult
    8. For Each SearchResults In ds.FindAll()
    9. Console.WriteLine(SearchResults.Properties("name").Item(0).ToString)
    10. Next


    Mit dem Filter:

    VB.NET-Quellcode

    1. ds.Filter = "(objectCategory=group)"


    weiß ich das es diese Gruppe gibt und ich weiß das dort User drin sind. Nur das auslesen funktioniert nicht.

    Hoffe jemand kann mir helfen. Vielen Dank im voraus.
    @newVBuser Ist das die korrekte Syntax der Property Filter?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Hi,
    ich hatte die Woche ein ähnliches Anliegen und hab es dann so gelöst:

    VB.NET-Quellcode

    1. Imports System.DirectoryServices.AccountManagement
    2. Public Function GetUserlist(ByVal baseDN As String) As List(Of String)
    3. 'baseDN = Beispiel "OU=HQ,DC=Contoso,DC=com"
    4. Dim listEntry As New List(Of String)
    5. Using Connect = New PrincipalContext(ContextType.Domain, "Contoso", baseDN), usrSearch = New PrincipalSearcher(New UserPrincipal(Connect))
    6. Dim grp = GroupPrincipal.FindByIdentity(Connect, IdentityType.Name, "GruppeAdmins")
    7. For Each usr As UserPrincipal In usrSearch.FindAll()
    8. If usr.IsMemberOf(grp) Then
    9. listEntry.Add(usr.DisplayName)
    10. End If
    11. Next
    12. End Using
    13. Return listEntry
    14. End Function


    die listentry kannst Du dann zum Beispiel an eine Listbox hängen (Listbox1.Datatsource = GetUserList("OU=HQ,DC=Contoso,DC=com"))
    "Hier könnte Ihre Werbung stehen..."
    Hallo und Entschuldigung für die späte Antwort. Kann nur Mo, Mi an der AD Abfrage arbeiten.

    Habe PrincipalContext importiert und die DLL eingebunden. Leider kann ich so gar nichts auslesen und Visual Studio bringt bei Ausführung die Meldung "Mit dem Server konnte keine Verbindung hergestellt werden" und markiert

    VB.NET-Quellcode

    1. Using Connect = New PrincipalContext(ContextType.Domain, "XYZ", baseDN), usrSearch = New PrincipalSearcher(New UserPrincipal(Connect))


    Muss mich korrigieren. Server scheint er zu finden, denn andere Gruppen findet er. Nur meine die ich benötige nicht :( denn dann meckert er server nicht gefunden.

    @RodFromGermany:
    Die Filter hab ich von Microsofts Technet
    social.technet.microsoft.com/w…-ldap-syntax-filters.aspx
    Filter -> ds.Filter = "(objectCategory=group)" , und einige andere beispiele funktionieren, nur der Filter ->
    ds.Filter = "(&(objectCategory=person)(objectClass=user)(memberof=cn=XYZ)) irgendwie nicht.

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „newVBuser“ ()

    Hab endlich was gefunden das auch bei mir funktioniert:

    VB.NET-Quellcode

    1. Dim Users() As String = Nothing
    2. Dim baseDN As String = "LDAP://DC=XYZ,DC=XYZ"
    3. Dim GroupName As String = "XYZ"
    4. Dim Parent As New DirectoryServices.DirectoryEntry(baseDN)
    5. Dim Search As New DirectoryServices.DirectorySearcher(Parent)
    6. Search.SearchScope = DirectoryServices.SearchScope.Subtree
    7. Search.Filter = "(CN=" & GroupName & ")"
    8. Search.PropertiesToLoad.Add("member")
    9. Dim Result As DirectoryServices.SearchResult = Search.FindOne
    10. Dim prop_value As String, i As Integer = 0
    11. If Result IsNot Nothing Then
    12. If Result.Properties("member").Count > 0 Then
    13. ReDim Users(Result.Properties("member").Count - 1)
    14. For Each prop_value In Result.Properties("member")
    15. Dim S2 As New DirectoryServices.DirectorySearcher(Parent)
    16. S2.SearchScope = DirectoryServices.SearchScope.Subtree
    17. S2.Filter = "(" & prop_value.Substring(0, prop_value.IndexOf(","c)) & ")"
    18. S2.PropertiesToLoad.Add("name")
    19. Dim R2 As DirectoryServices.SearchResult = S2.FindOne
    20. For Each Prop As String In R2.Properties("name")
    21. Console.WriteLine(Prop)
    22. Next
    23. Next
    24. End If
    25. End If


    Das BSP von MichaHo hat zwar auch bei einige der Abfragen funktioniert nur nicht bei meinem Hauptproblem. Beides dennoch Gute Lösungen letzten Endes. Danke MichaHo
    Hi,
    gut das Deine Lösung funktioniert!
    Bei meiner Lösung sollte es auch funktionieren, basierend halt auf den baseDN, dieser sollte dann so gewählt sein, das die Gruppe auch gefunden werden kann.
    Beispiel: unsere Domain heisst MN.local und der Haupt Container heisst HQ, dort sind alle Gruppen definiert inklusive User usw., daher ist mein baseDN dann "OU=HQ,DC=MN,DC=local"
    willst Du nur b estimmte Conmtainer abfragen, hängst Du sie einfach vorne dran: ""OU=Sicherheitsgruppen,OU=Deutschland,OU=HQ,DC=MN,DC=local"
    In meiner Variante benötigst Du das "LDAP" davor nicht.
    "Hier könnte Ihre Werbung stehen..."