ASP.NET Get Members from Active Directory Group

I am trying to query an active directory group and return the members of that group. I have tried several different ways with no luck.  Attached is my last failed attempt.  Any help is greatly appreciated.
Imports System.DirectoryServices
Imports System.Security.Principal
 
Partial Class TestResults
    Inherits System.Web.UI.Page
 
    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        Response.Write(GetADGroupUsers("Health Department"))
    End Sub
 
    Public Function GetADGroupUsers(ByVal groupName As String) As ArrayList
        Dim result As SearchResult
        Dim search As New DirectorySearcher
        search.Filter = String.Format("(cn={0})", groupName)
        search.PropertiesToLoad.Add("member")
        result = search.FindOne()
        Dim i As Integer = 0
 
        Dim userNames As New ArrayList
 
        For i = 0 To result.Properties("members").Count
            userNames.Add(result.Properties("members")(i).ToString)
        Next
        GetADGroupUsers = userNames
    End Function
End Class

Open in new window

LVL 1
jayh99Asked:
Who is Participating?
 
Dustin HopkinsConnect With a Mentor Senior Web DeveloperCommented:
You should just be able to plug that (OU=Health Department,DC=MYDOMAIN,DC=com), or something similiar, in as  as your diretory entry
Dim de As New DirectoryServices.DirectoryEntry("LDAP://OU=Health Department,DC=MYDOMAIN,DC=com")

0
 
Guy Hengel [angelIII / a3]Billing EngineerCommented:
could this sample code help:
http://msdn.microsoft.com/en-us/library/ms180885(VS.80).aspx

in short:
* you don't tell the directorysearch where to search from
* you asked findOne instead of findall

error:
        For i = 0 To result.Properties("members").Count
must be:

        For i = 0 To result.Properties("members").Count -1

0
 
jayh99Author Commented:
Thanks for the comment.  I will give it a try when I get in to work on Monday.
0
Free Tool: Path Explorer

An intuitive utility to help find the CSS path to UI elements on a webpage. These paths are used frequently in a variety of front-end development and QA automation tasks.

One of a set of tools we're offering as a way of saying thank you for being a part of the community.

 
Dustin HopkinsSenior Web DeveloperCommented:
the main problem other than not running the search. Is the property needs to be changed to "member" as members is not a property. Also you can use findone is you wish, so long as you don't have similiar group names. here is a quick example.

Note: the member property doesn't contain SAMAccounName(s) like (domain\username), but instead contains the user account's distinguished name (cn=username,dc=domain,dc=com) ect

Dim de As New DirectoryServices.DirectoryEntry("LDAP://domain.youcompany.com")'<---make sure to change to your ad connstring
        de.Username = SvcAcct '<--- domain accountname
        de.Password = SvcPass '<--- domain account password
        de.AuthenticationType = DirectoryServices.AuthenticationTypes.Secure
        Dim deSearch As New DirectoryServices.DirectorySearcher(de)
        Dim groupname As String = "Health Department" '<---group you wish to load
        deSearch.Filter = "(&(objectClass=group) (cn=" + groupname + "))"
        Dim results As DirectoryServices.SearchResultCollection = deSearch.FindAll()
        Dim result As DirectoryServices.SearchResult
        If (results.Count > 0) Then
            Dim userNames As New ArrayList
            For Each result In results
                For Each member As String In result.Properties("member")
                    userNames.add(member)
                Next
            Next
        End If
    End Sub

Open in new window

0
 
jayh99Author Commented:
   Private Sub GetADGroups()
        Dim de As New DirectoryServices.DirectoryEntry("LDAP://civicnet.com")        
        de.Username = "MyServiceAccount"
        de.Password = "MyServicePassword"
        de.AuthenticationType = DirectoryServices.AuthenticationTypes.Secure
        Dim deSearch As New DirectoryServices.DirectorySearcher(de)
        Dim groupname As String = "Health Department" '<---group you wish to load
        deSearch.Filter = "(&(objectClass=group) (cn=" + groupname + "))"
        Dim results As DirectoryServices.SearchResultCollection = deSearch.FindAll()
        Dim result As DirectoryServices.SearchResult
        If (results.Count > 0) Then
            Dim userNames As New ArrayList
            For Each result In results
                For Each member As String In result.Properties("member")
                    Response.Write(member)
                    userNames.Add(member)
                Next
            Next
        End If
    End Sub

I think it is getting close, but there are no items displayed when I call this.  I have double checked the groupname, and have even tried other groups with no luck.  Any ideas?
0
 
jayh99Author Commented:
It looks like it is the filter that is causing the problems.  If I comment out that line of code, I can display all members in the AD.  And if I add an if/then looking for member.Contains("Health Department") it displays all the members of that group.
0
 
jayh99Author Commented:
I also just noticed that Health Department is an organizational unit, not a common name, so that is probably part of the reason the filter is not working correctly.
0
 
Dustin HopkinsSenior Web DeveloperCommented:
I'm getting confused as to what you are trying to accomplish. Aren't you trying to get all members of that group? Also is health department just an ou or is it also a group?
0
 
jayh99Author Commented:
I am wanting all members of health department. I think I worded my question wrong above because I didn't realize until this morning that it is an ou rather than a group.  

CN=D-Internet_FTP,OU=Users,OU=Health Department,DC=MYDOMAIN,DC=com
0
 
jayh99Author Commented:
And is it possible to get only the cn for each member of the ou?
0
 
jayh99Author Commented:
Thanks for your help.  I have got it working now.
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.