This application does one simple task. On any network where Microsoft Active
Directory is used it will list all computers on the network. I faced this
problem when I wanted to document all of the computers on the network using WMI.
One of the strengths of Active Directory is it allows you to create a
representation of your organization. Imagine a large network spanning multiple
physical locations with around 5000 computers for example.
In Active Directory I could have one folder or what Active Directory calls an OU
or Organizational Unit. In that OU I could have all my computers listed. Of
course realistically I would want to have multiple OU's to break up the list of
computers. For instance I could have one OU per site. If that still left me with
large amounts of computers in each OU I could then break it down by department
etc. The advantage of doing this soft of thing is you could then assign an
administrator for each OU.
My problem was assuming a scenario above, how would I get a list of all
computers in an organizations Active Directory when they could be stored in OU's
within OU's etc. Surely I don't have to write complex code to walk down an
Active Directory tree with sub nodes etc? As it turns out there is a very simple
solution to this problem. Each Active Directory entry has an objectClass
property associated with it. Using this property allows me to search on just
computers. I could also do the same for users etc.
I discovered this by outputting my companied Active Directory to a CSV file and
then reading the data in Microsoft Excel.
Running the code below (assuming you have put in your own domain name) will list
all the computers in your Active Directory. You could then feed the list to your
networks DNS to get their IP addresses.
Source Code:
'ActiveDirectorySearch1
'Displays all computer names in an Active Directory
'Written 08/26/02 - John O'Donnell
Imports System
Imports System.DirectoryServices
Namespace ActiveDirectorySearch1
Class Class1
Shared Sub Main(ByVal args() As String)
'Note : microsoft is the name of my domain for testing purposes.
Dim enTry As DirectoryEnTry
= New DirectoryEnTry(LDAP://microsoft)
Dim mySearcher As DirectorySearcher
= New DirectorySearcher(enTry)mySearcher.Filter
= ("(objectClass=computer)")
Console.WriteLine("Listing of computers in the
Active Directory")
Console.WriteLine("======================")
Dim resEnt As SearchResult
For Each resEnt In mySearcher.FindAll()
Console.WriteLine(resEnt.GetDirectoryEnTry().Name.ToString())
Next
Console.WriteLine("=========== End of Listing =============")
End Sub
End Class
End Namespace