Hi everybody,

I've been searching for days to find a way to access Active directory database from my VB.NET appz and nothing made good results so far.. The Active directory DB is located onto a Win2k3 server but we have another on a NT4 server too.. Neither worked.. :( First, I was having a "Server not operational" error message, but fixed it in putting more parameters into the DirectoryEntry creation string. But now, I always get a "A referral was returned from the server(0x8007202B)" error message.. I tried to change as many things I could, but it still bugs me.. Any Idea?!??

Here's the source:
Dim oRoot As DirectoryEntry = New DirectoryEntry("LDAP://" & Me.mServer & ":389/DC=Dynanet,DC=com", "test", "test", AuthenticationTypes.Secure)

Dim oSearcher As DirectorySearcher = New DirectorySearcher(oRoot)
Dim oResult As SearchResult


'it bugz at this line, right on the For declaration
For Each oResult In oSearcher.FindAll

If Not CStr(oResult.GetDirectoryEntry().Properties("cn").Value) = "" Then
Dim User As New LDAPUser(CStr(oResult.GetDirectoryEntry().Properties("uid").Value), _
CStr(oResult.GetDirectoryEntry().Properties("givenName").Value), _
CStr(oResult.GetDirectoryEntry().Properties("desc").Value), _
CStr(oResult.GetDirectoryEntry().Properties("email").Value), _
CStr(oResult.GetDirectoryEntry().Properties("phone").Value), _
Me.HashItems.Add(User.userId, User)

End If

Next oResult
Catch ex As Exception
oRoot = Nothing
oSearcher = Nothing
oResult = Nothing
End Try

Thanks all!

I've found that the easiest way to query the AD Directory is by using the Active Directory Provider for ADO. Here's the code for a console app that will give you the distinguished names for all the computers in the built-in Computers container. Just give the app your FQDN and it should give you results. Also keep in mind that I did not include ANY error checking or handling in this.

Hope it helps!


Imports ADODB
Imports System

Module ListADComputers

Sub Main()

' define local variables
Dim oConn As New ADODB.Connection
Dim oRS As New ADODB.Recordset
Dim oComm As New ADODB.Command
Dim strComputerName As String
Dim strDomainName As String

' get console parameters
System.Console.WriteLine("What is the name of the AD Domain you wish to query?")
strDomainName = System.Console.ReadLine()

' set connection properties
With oConn
.Provider = "ADsDSOObject"
.Open("Active Directory Provider")
End With

' set command properties
With oComm
.ActiveConnection = oConn
.CommandText = "<LDAP://CN=Computers,DC=" & Left(strDomainName, Len(strDomainName) - 4) & ",DC=" & _
Right(strDomainName, 3) & ">;(objectClass=computer);distinguishedName"
End With

' open recordset
oRS = oComm.Execute

If Not oRS.EOF Then
Do Until oRS.EOF
End If

' clean up objects
oRS = Nothing
oComm = Nothing
oConn = Nothing

End Sub

End Module