65.9K
CodeProject 正在变化。 阅读更多。
Home

使用 C# 枚举 Active Directory 对象

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.50/5 (18投票s)

2004年7月30日

2分钟阅读

viewsIcon

160392

downloadIcon

5215

本文档展示了如何测试 Active Directory 连接,并基于某些筛选条件枚举所有对象。

Sample Image - ADTester_Image.jpg

引言

微软在 Windows 2000 中引入了 Active Directory 的概念。关于各种资源(如人员、机器、打印机、组等)的信息都存储在 Active Directory 中。它为基于 Windows 的用户帐户、客户端、服务器和应用程序提供了一个单一的管理点,并方便网络管理员和用户对网络进行集成视图。

这个简单的示例使用 System.DirectoryServices 命名空间与 Active Directory 交互。该命名空间包含两个类 DirectoryEntryDirectorySearcher,用于连接到 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 字符串。

希望您喜欢这个小示例!

© . All rights reserved.