使用 C# 枚举 Active Directory 对象






4.50/5 (18投票s)
2004年7月30日
2分钟阅读

160392

5215
本文档展示了如何测试 Active Directory 连接,并基于某些筛选条件枚举所有对象。
引言
微软在 Windows 2000 中引入了 Active Directory 的概念。关于各种资源(如人员、机器、打印机、组等)的信息都存储在 Active Directory 中。它为基于 Windows 的用户帐户、客户端、服务器和应用程序提供了一个单一的管理点,并方便网络管理员和用户对网络进行集成视图。
这个简单的示例使用 System.DirectoryServices
命名空间与 Active Directory 交互。该命名空间包含两个类 DirectoryEntry
和 DirectorySearcher
,用于连接到 Active Directory 源并从中检索数据。这些类可以与四种 AD 服务提供商中的任何一种一起使用,即 LDAP、IIS、NDS 和 WinNT。我使用了 LDAP,因为它是一种基于文本、易于使用且平台无关的协议。
用户可以指定特定的 AD 源路径,否则将查询默认的 AD。可以应用不同的筛选器来列出目录对象,例如对象类别(用户、计算机、组等)和组织单位 (OU)。
为了与 Active Directory 交互,首先需要调用目录条目构造函数,该构造函数接受一个 LDAP 字符串(在本例中)作为参数。该 LDAP 字符串可以包含域控制器和组织单位的名称,例如:ldap://OU=IT,DC=12,DC=test,DC=com/。
DirectoryEntry entry = null;
entry = new DirectoryEntry(strPath);
其中 strPath
包含 LDAP 字符串路径。
要从 Active Directory 检索目录对象,必须创建 DirectorySearcher
类的对象,并在其构造函数中将 DirectoryEntry
的对象作为参数传递。
DirectorySearcher mySearcher = new DirectorySearcher(entry);
DirectorySearcher
提供了不同的属性来执行自定义搜索。您可以创建一个自定义筛选器来执行筛选搜索,例如
mySearcher.Filter = "(ObjectCategory=user");
最后,它有一个函数 FindAll()
,它搜索目录以查找所需的结果,并返回一个来自 Active Directory 的节点集合,类型为 SearchResultCollection
。您可以遍历集合以获取单个结果。
foreach(SearchResult result in mySearcher.FindAll())
{
strName = result.GetDirectoryEntry().Name;
//Do whatever
}
我编写了一个函数 GetLDAPPath()
,它根据用户输入返回格式化的 LDAP 字符串。
希望您喜欢这个小示例!