首页 | 互联网 | IT动态 | IT培训 | Cisco | Windows | Linux | Java | .Net | Oracle | 软件测试 | C/C++ | 嵌入式开发 | 存储世界 | 服务器
网络设备 | IDC | 安全 | 求职招聘 | 数字网校 | 网页设计 | 平面设计 | 技术专题 | 电子书下载 | 教学视频 | 源码下载 | 搜索 | 博客 | 论坛
中国IT教育
Google
您现在的位置: 中国IT实验室 >> Windows >> 服务器技术 >> 域服务器 >> 正文

如何用ADSI实现自动化的活动目录操作


  网管们都应该知道,脚本对于减轻工作量来说是非常有用的。通过脚本,以前需要手工数小时才能完成的工作,现在只需要完全交给电脑自动处理就可以了。比如建立一个Visual Basic Scripting Edition (VBS),Windows Management Instrumentation (WMI)就可以自动完成Windows系统中的多种任务。
  
  而我们今天介绍的另一种脚本技术可以实现活动目录的自动化操作,这就是活动目录访问接口(Active Directory Service Interfaces ,ADSI)。使用ADSI,你可以完成任何通过Active Directory GUI界面可以完成的工作,比如创建、删除、修改目录对象(容器、用户、组,等等)。另外,ADSI可以通过查询目录来快速获得目录信息。
  
  下面我就来介绍一下ADSI以及它对活动目录的基本操作。
  
  绑定到目录
  和使用Visual Basic 的GetObject方法绑定到WMI一样,你也可以基于Lightweight Directory Access Protocol (LDAP)使用GetObject方法绑定目录。在ADSI脚本中,首先需要指定一个LDAP驱动,这实际上是一个名为adsldp.dll的文件,只不过我们要加一个“LDAP:”作为前缀。这和我们使用WMI脚本的方法类似,只不过在WMI脚本中前缀变成了“Winmgmts:”。另外,你必须指定目录对象的路径,比如域、部门单元、用户组或者用户。LDAP驱动和目录路径结合起来被称为AdsPath。在这段代码中,我们会将LDAP和acme.com 域的Marketing单元绑定在一起。
  
  在代码中我们会注意到,第一,AdsPath是被引号和括号包围的。我们在编辑ADSI脚本或其他任何脚本时,都应该使用纯文本编辑器,比如Notepad,因为在Microsoft Word中带有智能标记功能,由它编写出来的脚本代码不会被主机识别出来。第二,注意我们是如何设计对象路径的。所有域名都采用了两个字符来标识,而这两个字符并不是随便写的,它们被称为Attribute Type。它与Object Class一起使用,用来标明是属于容器对象还是叶子对象。表A列出了这种表示方法的含义。
  
 

  举个例子,假如我们希望绑定westcoast.acme.com域中Finance OU里面Managers组的成员Mary,我们可以使用这段代码。
  
  另外,对于用户和组来说,cn属性类型也表示容器,比如"Users"、"Computers"、"Domain Controllers"等。
  
  绑定之后
  正如我们所期望的,当我们将对象绑定到活动目录后,就可以执行四种基本的操作了。每种操作都由一种方法实现,如表B所示。
  

  如果打算使用其中任何一种方法,还需要在语句中以参数的形式提供相应的信息,比如“创建什么内容?”之类的。假设现在我们要在acme.com的Marketing OU中创建一个名为MSmith的用户,我们可以使用这段代码 。
  
  代码中前两行表示告诉脚本要绑定到活动目录,然后建立一个名为MSmith 的User对象类。接下去两行看起来可能会有些陌生,下面我就来解释一下。对于一个用户,他具有多种属性可以进入存储在活动目录的数据库(查看User属性就能看到了),比如电话号码、姓名、办公室位置等。在这些属性中,只有用户名即代码中的“sAMAccountName”是建立用户所必须的。因此第三行使用Put方法修改第二行所建立的用户的属性。当然,我们也可以再添加一些别的属性。
  
  第四行是用来将修改(创建对象或修改属性等动作)提交给活动目录的,它使用了一个叫做SetInfo的方法。如果没有这最后一行代码,脚本不会对活动目录产生任何影响。
  
  我们还可以使用Get方法获取活动目录对象的属性。通过这段代码,我们显示了Marketing OU中的description属性。
  
  rootDSE
  在上面任何一个代码范例中,我们都没有指定服务器名,这是由于ADSI支持“无服务器绑定”,也就是我们不需要输入域控制器的名称。借由这种特性,我们其实也不必输入AdsPath。当然我们可以将脚本绑定到根目录,也就是所谓的Root Directory Service Entry (rootDSE),然后利用它的属性绑定到当前的域。
  
  具体的做法是通过rootDSE中一个被称作defaultNamingContext的属性找到AdsPath,然后再利用AdsPath绑定到当前域。这里的“当前域”是指用户登录的域。假设当前域为westcoast.acme.com,这段代码 显示了如何不注明AdsPath即可进行绑定。
  
  在代码中,我们首先绑定到rootDSE,然后利用Get方法获得了defaultNamingContext属性并将其赋值给一个字符串变量。最后我们使用这个字符串变量作为域名的引用。在这个例子中,字符串变量strADsPath的实际值应该是LDAP://DC=westcoast, DC=acme, DC=com 。
  
  绑定变量到rootDSE的好处在于,不管当前的域是什么都可以使用同一脚本。为了显示这种方法的实用价值,我们在自己的活动目录实验室中进行了测试,目标是在三个不同的域中各建立500个用户,其用户名分别为User1、User2......以此类推。你可以想象,假如采用活动目录的GUI界面,我们需要花费多长的时间才能创建完这些用户。而当我们在每个域中都采用这段脚本,你会发现完成这个任务是一件相当简单的事情。
  
  实际上,有关ADSI的内容远不止我们在这篇文章中所涉及到的。想获取更多有关 ADSI的知识,请访问微软MSDN网站上的 "Using Active Directory Service Interfaces" 。
  
  
【责编:admin】

中国IT教育

相关产品和培训
文章评论
 友情推荐链接
 专题推荐

 ·带你领略windows系统“另类”安装
 ·“调教”磁盘,让Vista更在行
 ·windows系统性能优化专题
 ·windows系统安全——系统进程与病毒
 ·Windows 平台搭建VPN攻略…
 ·Windiws 系统备份与还原…
 ·专题:Windows Vista系统新特性…
 ·Windows server 2008专题报道…
 ·关注未来 关注Windows Vista成长…
 ·明明白白 学会Windows权限设置…
 今日更新
 认证培训
 频道精选
 Windows频道导航