1

J'ai besoin de mon programme pour obtenir la liste des noms de connexion utilisateur dans un groupe.LDAP Obtenir une liste de noms de connexion

C'est ce que j'ai jusqu'ici mais cela ne fait que renvoyer tous les utilisateurs ... dont j'ai besoin de réduire à ceux dans un groupe, dont j'ai le nom.

Option Explicit On 
Imports System.DirectoryServices 
Imports System.DirectoryServices.ActiveDirectory 

Module Module1 
    Sub Main() 
     Dim ADEntry As New DirectoryServices.DirectoryEntry("LDAP://OU=Users,OU=Irvine,OU=KNS,DC=corp,DC=kns,DC=com") 
     Dim objSearch As New System.DirectoryServices.DirectorySearcher(ADEntry) 

     Dim oResults As DirectoryServices.SearchResultCollection 
     Dim oResult As DirectoryServices.SearchResult 

     ' THIS DOESNT WORK 
     ' objSearch.Filter = "department = engineering" 

     oResults = objSearch.FindAll 

     For Each oResult In oResults 
      Console.WriteLine(oResult.GetDirectoryEntry.Properties("sAMAccountName").Value) 
     Next 
    End Sub 
End Module 

Répondre

1

Essayez de changer le déposant à

objSearch.Filter = "(&(objectCategory=user)(memberOf=CN=Employees,OU=Security Groups,DC=yourdomain,DC=com))" 

Le groupe est composé d'employés.

Source: How to write a LDAP search filter

Note: Je ne pouvais pas tester. Faites-moi savoir si cela fonctionne ou non.

1

Si vous voulez que tous les membres d'un groupe, essayez ceci:

1) se lient au groupe:

DirectoryEntry theGroup = 
    new DirectoryEntry("LDAP://cn=YourGroupname,ou=SomeOU,dc=YourCompany,dc=com"); 

2) Ensuite, énumérer ses membres - c'est le « membre » propriété du groupe de DirectoryEntry:

foreach(object dn in theGroup.Properties["member"]) 
{ 
    Console.WriteLine(dn); 
} 

Chaque entrée dans la propriété « membre » du groupe devrait être le DN complet (nom unique) de ses membres - utilisateurs ou d'autres groupes. Votre question indique que vous essayez d'énumérer les membres d'un groupe - mais votre code ressemble plus à une énumération de tout ce qui se trouve dans une unité d'organisation - ces deux tâches sont très différentes! Lequel avez-vous vraiment besoin?

Vous pouvez trouver un Quick List for Visual Basic.NET Code Samples dans la bibliothèque MSDN, ou vous pouvez en apprendre plus sur How to do almost everything in Active Directory sur CodeProject (avec des échantillons C#).

Marc

0
Dim ADEntry As New DirectoryServices.DirectoryEntry("LDAP://ou=users,ou=irvine,ou=kns,dc=corp,dc=kns,dc=com") 
    Dim objSearch As New System.DirectoryServices.DirectorySearcher(ADEntry) 

    Dim oResults As DirectoryServices.SearchResultCollection 
    Dim oResult As DirectoryServices.SearchResult 

    objSearch.Filter = "(&(objectCategory=person)(objectClass=user)(department=Engineering)(!userAccountControl:1.2.840.113556.1.4.803:=2))" 
    oResults = objSearch.FindAll 

    For Each oResult In oResults 
     Console.WriteLine(oResult.GetDirectoryEntry.Properties("sAMAccountName").Value) 
    Next 

cela a fonctionné !!

0

Il y a quelques années, j'ai construit un composant AD que nous utilisons souvent juste pour cette tâche. Essaye ça. De nombreuses informations peuvent être extraites de l'AD si vous savez où le chercher.

Public Function GetUsersInGroup(ByVal GroupName As String) As String() 
     If GroupName = String.Empty Then Return Nothing 
     Dim Users() As String = Nothing 
     Dim S As String = "LDAP://DC=YourCompany,DC=com" 
     Dim Parent As New DirectoryServices.DirectoryEntry(S) 
     Dim Search As New DirectoryServices.DirectorySearcher(Parent) 

     Search.SearchScope = DirectoryServices.SearchScope.Subtree 
     Search.Filter = "(CN=" & GroupName & ")" 
     Search.PropertiesToLoad.Add("member") 

     Dim Result As DirectoryServices.SearchResult = Search.FindOne 
     Dim prop_value As String, i As Integer = 0 
     If Result IsNot Nothing Then 
      If Result.Properties("member").Count > 0 Then 
       ReDim Users(Result.Properties("member").Count - 1) 
       For Each prop_value In Result.Properties("member") 
        Dim S2 As New DirectoryServices.DirectorySearcher(Parent) 
        S2.SearchScope = DirectoryServices.SearchScope.Subtree 
        S2.Filter = "(" & prop_value.Substring(0, prop_value.IndexOf(","c)) & ")" 
        S2.PropertiesToLoad.Add("SAMAccountName") 
        Dim R2 As DirectoryServices.SearchResult = S2.FindOne 
        For Each Prop As String In R2.Properties("SAMAccountName") 
         Users(i) = Prop.ToUpper 
         i = i + 1 
        Next 
       Next 
       Exit For 
      End If 
     End If 
End Function