HOWTO: Enumerate Connected Sites & Servers in Exchange with ADSI
ID: Q200726
|
The information in this article applies to:
-
Microsoft Windows Software Development Kit (SDK)
-
Microsoft Visual Basic Learning, Professional, and Enterprise Editions for Windows, version 5.0
on the following platforms: NT, Win95
-
Exchange Development Kit (EDK), version 5.5
on the following platforms: NT, Win95
-
Microsoft Exchange Server, version 5.5
-
Microsoft Active Directory Service Interfaces, version 2.0
SUMMARY
The following sample code in Visual Basic illustrates using ADSI LDAP provider objects to enumerate all the connected sites and servers in an Exchange organization. In order to use this code, you must have at least one Exchange 5.5 server in your connected sites. You should also have the latest ADSI client runtime (version 2.0 or better) installed on your system.
MORE INFORMATION
Steps to Reproduce Behavior
- Open a new Standard EXE Visual Basic Project.
- Add a Module.
- Make a reference to the Active DS Type Library.
- Set the Startup Object to Sub Main.
- Copy and paste the following sample code into the Module:
' Sample to enumerate sites and servers in an Exchange Organization
' using ADSi objects
Option Explicit
Sub Main()
Dim objOrg As IADsContainer
Dim objOU As IADsContainer
Dim objConfig As IADsContainer
Dim objServers As IADsContainer
Dim obj As IADs
' Replace "Server" with the name of any Exchange 5.5 server in one of
' the connected sites you want to enumerate.
Set objOrg = GetObject("LDAP://Server")
Debug.Print objOrg.Name
' filter passes organizationalUnit and any classes derived from it
' such as View-Root
objOrg.Filter = Array("organizationalUnit")
For Each objOU In objOrg
With objOU
' Test that the most derived class is organizationalUnit
If objOU.Class = "organizationalUnit" Then
Debug.Print "Site: " + .Name
objOU.Filter = Array("Container")
For Each objConfig In objOU
With objConfig
' Test for cn=Configuration (root container)
If .Name = "cn=Configuration" Then
' In case configuration might have non-containers
.Filter = Array("Container")
For Each objServers In objConfig
With objServers
' Test for cn=Servers inside of Configuration container
If .Name = "cn=Servers" Then
.Filter = Array("Computer")
For Each obj In objServers
With obj
Debug.Print Chr(9) & "Server: " & .Name
Debug.Print Chr(9) & "ADsPath: "; .ADsPath
End With
Next obj
End If
End With
Next objServers
End If
End With
Next objConfig
End If
End With
Next objOU
Debug.Print "End Enumeration"
End Sub
REFERENCES
Information on ADSI version 2.0 is included in the Platform SDK section of MSDN after October 1997. ADSI is also available on the following Web site:
http://www.microsoft.com/windows/server/overview/features/ataglance.asp
Additional query words:
Keywords : kbAPI kbEDK kbMsg NtwkADSI
Version : WINDOWS:5.0,5.5; winnt:2.0,5.5
Platform : WINDOWS winnt
Issue type : kbhowto