none
Consultar Sub-Dominios en Active Directory RRS feed

  • Pregunta

  • Buenas tardes amigos del Foro, mi problema es el siguiente: actualmente estoy trabajando con Active Directory en mi aplicación Web, y realizo consultas en el mismo para obtener algunos datos de un usuario especifico utilizando el siguiente código:

        Public Function DisplayName(ByVal NombreUsuario As String) As String
            Dim xDominios As String() = {
            "DominioPrincipal",
            "SubDominio1,DC=DominioPrincipal",
            "SubDominio2,DC=DominioPrincipal",
            "SubDominio3,DC=DominioPrincipal",
            "SubDominio4,DC=DominioPrincipal"
            }
            For x = 0 To 4
                Dim entry As New DirectoryEntry(
    "LDAP://<IP Server Active Directory>/DC=" & xDominios(x).ToLower & ",DC=com"
    )
                Dim direntries As DirectoryEntries = entry.Children
                Dim searcher As New DirectorySearcher(entry)
                searcher.Filter = "(samaccountname=" & NombreUsuario & ")"
                Dim SearchResult As SearchResult = searcher.FindOne()
                If Not SearchResult Is Nothing Then
                    If SearchResult.Properties().Contains("displayname") Then
                        Return SearchResult.Properties("displayname").Item(0).ToString
                        Exit For
                    Else
                        Return NombreUsuario
                    End If
                End If
            Next
        End Function

    Como pueden ver yo ingreso el Dominio y Sub-Dominios, para que realice una búsqueda del usuario en cada uno y al conseguirlo se salga del For, mi pregunta es la siguiente como puedo realizar una consulta al Dominio principal y me devuelva los Sub-Dominios que le pertenecen. Ya que el administrador de redes en ocasiones puede cambiar el nombre de un Sub-Dominio o agregar uno nuevo y debo ir inmediatamente a la programación para modificar el cambio. Y si existe otra manera más elegante o eficiente para realizar el código antes descrito. Gracias de antemano


    José Antonio Gómez Linarez Técnico Superior en Informática

    miércoles, 3 de septiembre de 2014 19:19

Respuestas

Todas las respuestas

  • Aquí hay un artículo que tiene un ejemplo:

    http://www.janus-net.de/2005/11/18/getting-list-of-sub-domains-from-active-directory-with-c/

    Está en C#, pero debería resultar trivial convertirlo a VB.

    jueves, 4 de septiembre de 2014 18:02
  • Muchas gracias voy a revisarlo y si todo va bien colocare el código en VB. 

    José Antonio Gómez Linarez Técnico Superior en Informática

    jueves, 4 de septiembre de 2014 18:36
  • Muchas Gracias Alberto, obtuve lo que necesitaba. Aquí dejo el código el VB por que alguien lo necesita.

    Public Function SubDomains() As List(Of String)
            Dim Domains As List(Of String) = New List(Of String)
            Dim sRootDomain As String
            Dim deRootDSE As System.DirectoryServices.DirectoryEntry
            Dim deSearchRoot As System.DirectoryServices.DirectoryEntry
            Dim dsFindDomains As System.DirectoryServices.DirectorySearcher
            Dim srcResults As System.DirectoryServices.SearchResultCollection
    
            deRootDSE = New System.DirectoryServices.DirectoryEntry("GC://RootDSE")
            sRootDomain = "GC://" & deRootDSE.Properties("rootDomainNamingContext").Value.ToString()
    
            deSearchRoot = New System.DirectoryServices.DirectoryEntry(sRootDomain)
            dsFindDomains = New System.DirectoryServices.DirectorySearcher(deSearchRoot)
            dsFindDomains.Filter = "(objectCategory=domainDNS)"
            dsFindDomains.SearchScope = System.DirectoryServices.SearchScope.Subtree
    
            srcResults = dsFindDomains.FindAll()
            For Each srDomain As System.DirectoryServices.SearchResult In srcResults
                Domains.Add(srDomain.Path.ToString.Substring(5))
            Next
            Return Domains
        End Function


    José Antonio Gómez Linarez Técnico Superior en Informática

    jueves, 4 de septiembre de 2014 20:30