DirectoryEntry 对象

在 System.DirectoryServices 中,目录中的每个对象都由 DirectoryEntry 对象表示。DirectoryEntry 在内存中创建一个项对象;在调用 CommitChanges 方法之前,它实际上并没有在目录中创建该对象。这样做的好处在于,您可以从客户端应用程序检索用于访问的目录信息,并且在本地读取或修改这些信息,然后重新连接到服务器,以便将修改后的信息保存到该目录。这会使服务器的执行效率达到最高。
每个网络资源都表示为目录中的一个对象,并且每个目录对象(如前所述)都表示为客户端应用程序中的 DirectoryEntry。


目录项对象具有下列特征:

  • Name。此对象名称也称作相对可分辨名称 (RDN)。RDN 的格式采用语法 key=value。例如,在下图中,用户对象的 RDN 是 CN=Jeff Smith。请注意,空格不包括在内。
  • Parent。网络对象是分层的,并且除位于层次结构顶部的根对象(它是域对象,有时称作域头)之外都具有父对象。
  • Path。目录对象路径也称作可分辨名称 (DN)。可分辨名称由对象名称以及置于该名称前面的其各级父对象直至根对象的名称组成。例如,对于用户对象 CN=Jeff Smith,DN 以根对象开头,后面跟指向该用户对象的路径,如下所示:DC=Fabrikam,DC=COM,OU=Sales,CN=Jeff Smith。路径使用 LDAP 规范定义的语法。有关该路径的正确语法的详细信息,请参阅绑定字符串。该路径用于由 DirectoryEntry 对象创建的绑定字符串中。

对象路径模型
尽管前面的信息适用于使用 System.DirectoryServices 连接到的任何 LDAP 目录对象,但还有一些针对 Active Directory 域服务的事项需要予以注意。Active Directory 域服务对象的一个特性是,它们必须包含全局唯一标识符 (GUID)。尽管可以修改该对象的不同属性值,但 GUID 是不可变的。
下面的代码示例说明如何创建 DirectoryEntry 并编写其路径、名称和 GUID。在此示例中,DirectoryEntry 绑定到此用户当前连接到的域的根。

     static void Main(){DirectoryEntry AD = new DirectoryEntry("WinNT://" +   Environment.MachineName + ",computer");DirectoryEntry NewUser = AD.Children.Add("222", "user");NewUser.Invoke("SetPassword", new object[] { "#12345Abc" });//  NewUser.Invoke("Put", new object[] { "Description", "Test User from .NET" });NewUser.CommitChanges();DirectoryEntry grp;//grp = AD.Children.Find("Guests", "group");//if (grp != null)//{//    grp.Invoke("Add", new object[] { NewUser.Path.ToString() });//}Console.WriteLine("Account Created Successfully");Console.WriteLine("Path:---" + AD.Path);Console.WriteLine("Name:---" + AD.Name);Console.WriteLine("Guid:---" + AD.Guid);Console.WriteLine("AuthenticationType:---" + AD.AuthenticationType);Console.WriteLine("Children-:---" + AD.Children);Console.WriteLine("Container:---" + AD.Container);Console.WriteLine("NativeGuid:---" + AD.NativeGuid);Console.WriteLine("NativeObject:---" + AD.NativeObject);//  Console.WriteLine("ObjectSecurity:---" + AD.ObjectSecurity);Console.WriteLine("Options:---" + AD.Options);Console.WriteLine("Parent:---" + AD.Parent);Console.WriteLine("Properties:---" + AD.Properties);Console.ReadLine();Console.ReadKey();}

外加套餐:

System.DirectoryServices 命名空间用以从托管代码简便地访问 Active Directory
该命名空间包含两个组件类,即 DirectoryEntryDirectorySearcher

它们使用 Active Directory 服务接口 (ADSI) 技术。ADSI 是 Microsoft 提供的一组接口,作为使用各种网络提供程序的灵活的工具。无论网络有多大,

ADSI 都可以使管理员能够相对容易地定位和管理网络上的资源。

System.DirectoryServices 命名空间中的类可以与任何 Active Directory 服务提供程序一起使用。当前的一些提供程序包括 Internet 信息服务 (IIS)、轻量目录访问协议 (LDAP)、Novell NetWare 目录服务 (NDS) 和 WinNT。

ADSI 是 Microsoft Active Directory 的编程接口,使应用程序能够只使用一个接口就可以与网络上的不同目录进行交互。使用 ADSI,可以创建一些应用程序,

用以执行常见任务,如备份数据库、访问打印机和管理用户帐户。

Path 属性
  Path 属性唯一地标识网络环境中的此项。始终可以使用此 Path 检索此项。

  设置 Path 将从目录存储区检索新项;它不更改当前绑定的项的路径。

  与 DirectoryEntry 组件关联的类可与任何 Active Directory 域服务提供程序一起使用。当前的一些提供程序包括 Internet 信息服务 (IIS)、轻量目录访问协议 (LDAP)、Novell NetWare 目录服务 (NDS) 和 WinNT。

  说明:标识提供程序(在“://”前面)的 Path 部分是区分大小写的。例如,“LDAP://”或“WinNT://”。

  Path 属性的语法随提供程序不同而不同。一些常见的情况有:

名称 作用
WinNT 连接到计算机上的组。例如“WinNT://<域名>/<计算机名>/<组名>”。如果是连接到本地计算机,则为“WinNT://<计算机名>/<组名>”。 发现网络上的所有域。例如,“WinNT:”通过枚举此项的子级可以找到这些域。
LDAP 连接到域中的组。例如“LDAP://CN=<组名>, CN =<用户>, DC=<域组件>, DC=<域组件>,…”。
IIS 连接到 Web 目录。例如“IIS://LocalHost/W3SVC/1/ROOT/”。若要使用 LDAP 绑定到当前域,请使用路径“LDAP://RootDSE”,然后获取默认命名上下文,并重新绑定该项。例如:String str = ent.Properties[“defaultNamingContext”][0]; DirectoryEntry domain = new DirectoryEntry(“LDAP://” + str);
  1. 在网页中的通用方法:
      获取服务器电脑名:Page.Server.MachineName
      获取用户信息:Page.User
      获取客户端电脑名:Page.Request.UserHostName
      获取客户端电脑IP:Page.Request.UserHostAddress

  2. 在网络编程中的通用方法:
      获取当前电脑名:static System.Net.Dns.GetHostName()
      根据电脑名取出全部IP地址:static System.Net.Dns.Resolve(电脑名).AdressList
      也可根据IP地址取出电脑名:static System.Net.Dns.Resolve(IP地址).HostName

  3. 系统环境类的通用属性:
      当前电脑名:static System.Environment.MachineName
      当前电脑所属网域:static System.Environment.UserDomainName
      当前电脑用户:static System.Environment.UserName
    创建示例

打开 Microsoft Visual Studio .NET,然后新建一个 Visual C# Console 应用程序项目。
在“解决方案资源管理器”中,右键单击引用,然后单击添加引用。
添加一个对 System.DirectoryServices.dll 程序集的引用。

    static void Main(){DirectoryEntry AD = new DirectoryEntry("WinNT://" +   Environment.MachineName + ",computer");DirectoryEntry NewUser = AD.Children.Add("222", "user");NewUser.Invoke("SetPassword", new object[] { "#12345Abc" });NewUser.Invoke("Put", new object[] { "Description", "Test User from .NET" });NewUser.CommitChanges();DirectoryEntry grp;grp = AD.Children.Find("Guests", "group");if (grp != null){grp.Invoke("Add", new object[] { NewUser.Path.ToString() });}Console.ReadKey();}

创建本示例中的目录项时,假定系统正在运行 Microsoft Windows NT、Windows 2000 或 Windows XP。 注意,向 DirectoryEntry 构造函数传递以“WinNT://”开头的字符串。 您还可以在其他第三方操作系统上运行“目录服务”。

DirectoryEntry AD = new DirectoryEntry("WinNT://" + SystemInformation.ComputerName + ",computer");

向目录树添加目录项

以下代码在 Active Directory 树中添加了一个 user 类型的、值为 TestUser1 的 DirectoryEntry。

DirectoryEntry NewUser = AD.Children.Add("TestUser1", "user");

设置新用户帐户的密码和说明

以下代码调用 Invoke 方法来调用 DirectoryEntry 对象的 SetPassword 和 Put 方法。 这将为用户帐户设置密码并分配说明。 此代码还调用 CommitChanges 方法保存这些更改。

NewUser.Invoke("SetPassword", new object[] {"#12345Abc"});
NewUser.Invoke("Put", new object[] {"Description", "Test User from .NET"});
NewUser.CommitChanges();

将帐户添加到组

将帐户添加到组的第一步是定义 DirectoryEntry 类型的变量。 然后调用 ActiveDirectory 类 Children 成员的 Find 方法来填充变量。 在这种情况下,Guest 组是搜索目标。 此代码测试 Find 方法返回的值以确定是否已找到该组。 如果找到该组,新用户帐户便会添加到组中。

DirectoryEntry grp;
grp = AD.Children.Find("Guests", "group");
if (grp != null) {grp.Invoke("Add", new object[] {NewUser.Path.ToString()});}
http://www.cnblogs.com/tinawan/archive/2011/05/27/2059627.html

DirectoryEntry 对象相关推荐

  1. AD域根据组名称获取DirectoryEntry对象

    #region 根据组名获取DirectoryEntry对象/// <summary>/// 根据组名获取DirectoryEntry对象/// </summary>/// & ...

  2. AD域根据组织单位名称获取DirectoryEntry对象

    #region 根据组织单位名获取组织对象/// <summary>/// 根据组织单位名获取组织对象/// </summary>/// <param name=&quo ...

  3. AD域根据用户名称获取DirectoryEntry对象

    #region 根据用户帐号名称取得用户的对象/// <summary>/// 根据用户帐号名称取得用户的对象/// </summary>/// <param name= ...

  4. HTML5 本地文件操作之FileSystemAPI整理(二)

    一.文件目录操作 1.DirectoryEntry对象 属性: 1.isFile: 操作对象的是否为文件,DirectoryEntry对象固定其值为false 2.isDirectory: 操作对象是 ...

  5. 如何验证 Active Directory 使用表单身份验证和 Visual C#.NET

    本文引用下面的 Microsoft.NET 框架类库名称空间: System.Text System.DirectoryServices System.Security.Principal Syste ...

  6. [转载]细说ASP.NET Windows身份认证

    细说ASP.NET Windows身份认证 阅读目录 开始 认识ASP.NET Windows身份认证 访问 Active Directory 在ASP.NET中访问Active Directory ...

  7. 在线html5 api中文版,HTML5+ API Reference

    IO模块管理本地文件系统,用于对文件系统的目录浏览.文件的读取.文件的写入等操作.通过plus.io可获取文件系统管理对象. 常量: 方法: 对象: DirectoryEntry: 文件系统中的目录对 ...

  8. 使用目录服务和 Visual C# .NET 向本地系统添加用户

    创建示例 1. 打开 Microsoft Visual Studio .NET,然后新建一个 Visual C# Console 应用程序项目.  2. 在"解决方案资源管理器"中 ...

  9. 为JAVA性能而设计(一)

    为JAVA性能而设计(一)   发布时间:2007-1-9 15:51:42     来源:JavaWorld    作者:Brian Go- 为JAVA性能而设计(二)   发布时间:2007-1- ...

  10. ad 单点登录 java 访问权限_AD 单点登录以及windows认证详细说明

    上篇博客我谈到了一些关于ASP.NET Forms身份认证方面的话题,这次的博客将主要介绍ASP.NET Windows身份认证. Forms身份认证虽然使用广泛,不过,如果是在 Windows Ac ...

最新文章

  1. ABAP:SUBMIT执行其他报表并返回的数据
  2. 字节跳动再扩招1000人,招聘要求让人窒息
  3. C的无符号数据类型int,short,byte 转为 Java对应的数据long,char,short
  4. SAP CRM WebClient UI和CRM Fiori Account里显示Opportunity逻辑
  5. 企业内容管理-互联网应用
  6. [react] React16新特性有哪些?
  7. 动态规划——物品无限的背包问题
  8. 计算机大学生学生证,电子学生证运行一月争议多:学生感觉被监控
  9. opencv抠人像_卸载PS吧!这个小程序就能一键AI抠图,超简单!
  10. [原创]聊聊如何在职场中发邮件
  11. 打开Hololens自动相机,和live stream
  12. Unity Video Player(视频)
  13. android 平板原笔迹,9.7英寸的NFC和原始笔迹手写平板安卓平板电脑 汉普平板
  14. Bootstrap 折叠(Collapse)插件
  15. 【NOIP2017普及组】跳房子
  16. NPM Error: Cannot find module ‘caniuse-lite/data/features/css-unicode-bidi.js‘
  17. 7-1 计算存款利息 (10分) 本题目要求计算存款利息
  18. python 抽奖器_python编写实现抽奖器
  19. 基于微信小程序的网上电影购票的设计与实现
  20. 谈谈对于百度春晚战事的看法

热门文章

  1. Navicat for MySQL8.2注册码
  2. 计算机辅助设计课程设计评分标准,CAD考试规则评分标准.doc
  3. SIM800(GPRS)拨号上网失败未能连接服务器
  4. 支持向量机(Vladimir Vapnik)
  5. 安装器---Inno Setup
  6. c语言pi算法程序,C语言计算圆周率PI
  7. 一篇文章带你搞定数学建模中的 Malthus人口模型(含代码)
  8. 瑞利衰落的概念及应对技术——信道编码、交织、跳频
  9. 在线问卷工具LimeSurvey
  10. 2022年网络规划设计师最新考纲变化