用ADSI实现自动化的活动目录操作方法

系统 Windows 自动化
本文介绍了一种脚本技术即活动目录访问接口(Active Directory Service Interfaces ,ADSI),可以实现活动目录的自动化操作。

ADSI是什么?如何用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列出了这种表示方法的含义。

 用ADSI实现自动化的活动目录操作方法

举个例子,假如我们希望绑定westcoast.acme.com域中Finance OU里面Managers组的成员Mary,我们可以使用这段代码。

另外,对于用户和组来说,cn属性类型也表示容器,比如"Users"、"Computers"、"Domain Controllers"等。

绑定之后

正如我们所期望的,当我们将对象绑定到活动目录后,就可以执行四种基本的操作了。每种操作都由一种方法实现,如表B所示。

用ADSI实现自动化的活动目录操作方法

如果打算使用其中任何一种方法,还需要在语句中以参数的形式提供相应的信息,比如“创建什么内容?”之类的。假设现在我们要在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" 。

用ADSI实现自动化的活动目录操作方法希望能够对读者有所帮助。

【编辑推荐】

  1. 活动目录用户如何管理?
  2. 活动目录灾难管理员应该如何应对
  3. Win2000基础教程之活动目录的三种特性
  4. 活动目录中创建和编辑新的策略文件等问题
  5. 主域控制器重装系统后如何恢复活动目录帐号?
责任编辑:韩亚珊 来源: 中国IT实验室
相关推荐

2021-04-22 09:03:49

手机自动化测试

2022-11-15 10:20:55

物联网传感器

2018-05-11 13:39:05

PythonCSV接口测试

2018-05-11 08:29:10

Python自动化测试数据驱动

2010-03-04 14:32:24

Python自动下载文

2010-07-28 17:23:23

2015-10-21 15:08:25

电缆自动化

2023-10-30 17:41:29

机器人自动化

2013-07-04 13:37:23

Java开发速度

2021-07-14 13:11:02

papermillJupyterPython

2010-08-12 18:08:03

ibmdwRational

2020-07-05 23:10:20

网络自动化网络可预测性网络

2011-07-15 10:20:34

活动目录

2010-01-11 10:34:41

VB.NET图像操作

2021-04-01 10:51:44

机器人人工智能编程

2022-08-19 14:16:02

Python命令

2023-07-12 15:41:18

2022-12-13 10:41:27

2017-12-17 21:58:18

2010-01-07 10:28:04

VB.NET实现接口
点赞
收藏

51CTO技术栈公众号