Chinaunix首页 | 论坛 | 博客
  • 博客访问: 167664
  • 博文数量: 68
  • 博客积分: 1410
  • 博客等级: 上尉
  • 技术积分: 650
  • 用 户 组: 普通用户
  • 注册时间: 2005-05-18 11:13
文章分类

全部博文(68)

文章存档

2011年(1)

2006年(21)

2005年(46)

我的朋友

分类: WINDOWS

2005-11-22 15:07:46

本指南介绍如何联合运用轻量目录访问协议 (LDAP) 数据交换格式 (LDIF) 实用工具及若干使用 Microsoft Visual Basic® Scripting Edition (VBScript) 开发系统编写的示例程序对 Active Directory® 服务进行批处理管理。

本页内容
简介
概述
使用 VBScript 和 ADSI
附录 — 使用 LDIFDE
其他资源

简介

逐步式指南

Windows Server 2003 部署分步指南提供了很多常见操作系统配置的实际操作经验。本指南首先介绍通过以下过程来建立通用网络结构:安装 Windows Server 2003;配置 Active Directory;安装 Windows XP Professional 工作站并最后将此工作站添加到域中。后续分步指南假定您已建立了此通用网络结构。如果您不想遵循此通用网络结构,则需要在使用这些指南时进行适当的修改。

通用网络结构要求完成以下指南。

在配置通用网络结构后,可以使用任何其他的分步指南。注意,某些分步指南除具备通用网络结构要求外,可能还需要满足额外的先决条件。任何额外的要求都将在特定的分步指南中说明。

Microsoft Virtual PC

可以在物理实验室环境中或通过虚拟化技术(如 Microsoft Virtual PC 2004 或 Microsoft Virtual Server 2005)来实施 Windows Server 2003 部署分步指南。借助于虚拟机技术,客户可以同时在一台物理服务器上运行多个操作系统。Virtual PC 2004 和 Virtual Server 2005 就是为了在软件测试和开发、旧版应用程序迁移以及服务器整合方案中提高操作效率而设计的。

Windows Server 2003 部署分步指南假定所有配置都是在物理实验室环境中完成的,但大多数配置不经修改就可以应用于虚拟环境。

这些分步指南中提供的概念在虚拟环境中的应用不在本文的讨论范围之内。

重要说明

此处作为例子提到的公司、组织、产品、域名、电子邮件地址、徽标、个人、地点和事件纯属虚构,我们决无意影射,任何人也不应由此臆猜,任何真实的公司、组织、产品、域名、电子邮件地址、徽标、个人、地点或事件。

此通用基础结构是为在专用网络上使用而设计的。此通用基础结构中使用的虚拟公司名称和域名系统 (DNS) 名称并没有为在 Internet 上使用而注册。您不应在公共网络或 Internet 上使用此名称。

此通用基础结构的 Active Directory 服务结构用于说明“Windows Server 2003 更改和配置管理”如何与 Active Directory 配合使用。不能将其作为任何组织进行 Active Directory 配置时都可以使用的模型。

返回页首

概述

本指南介绍如何联合运用 LDAP 数据交换格式 (LDIF) 实用工具及一个使用 Microsoft Visual Basic Scripting Edition (VBScript) 开发系统编写的简单程序对 Active Directory 服务进行批处理管理。通过使用这些工具,您可以导出、导入以及修改对象,如用户、联系人、组、服务器、打印机以及共享文件夹。

在本指南中,您将执行以下任务。

使用 Ldifde.exe 实用工具执行批处理操作。将用户导出为与 LDIF 标准格式兼容的文件格式。执行所有用户的批处理修改。使用 LDIF 创建新用户和删除用户。

使用 Active Directory Service Interfaces (ADSI) 和 VBScript 执行批处理操作。使用 ADSI 和 VBScript 编写的脚本将用户导出到文本文件。使用 VBScript 执行所有用户的批处理修改。使用 VBScript 创建新用户和删除用户。

先决条件

使用 Ldifde.exe 实用工具

LDIF 是关于文件格式的 Internet 草案标准,这种文件格式可用于在符合 LDAP 标准的目录上执行批处理操作。LDIF 可用于导出和导入数据,因而可以在 Active Directory 中执行添加、修改及删除等批处理操作。Windows Server 2003 操作系统中包含一个名为“Ldifde.exe”的实用工具,用于支持基于 LDIF 标准的批处理操作。

您还可使用 Ldifde.exe 实用工具来扩展架构,将 Active Directory 用户和组信息导出到其他应用程序或服务,以及使用来自其他目录服务的数据填充 Active Directory。

注意:在将测试的架构扩展推入生产环境时,建议使用 Ldifde.exe 实用工具。

导出对象

您可以使用 Ldifde.exe 实用工具导出“Marketing”组织单位 (OU) 中的所有对象,这些对象是在中创建的。该示例搜索 OU 中的某些对象,并创建一个包含这些对象名称的文件。

使用 LDIF 导出对象

1.

以域管理员的身份登录。

2.

单击“开始”按钮,指向“所有程序”,指向“附件”,然后单击“命令提示符”。

3.

在“命令提示符”中,键入:

ldifde -f marketing.ldf -s hq-con-dc-01 -d "ou=marketing,ou=accounts,dc=contoso,dc=com" -p subtree -r "(objectCategory=CN=Person,CN=Schema,CN=Configuration,DC=contoso,DC=com)"

4.

按“Enter”键。结果应该与图 1 中显示的内容相似。

图 1.  导出目录数据

图 1. 导出目录数据
查看大图

上述命令使用以下方法来创建一个名为“Marketing.ldf”的 LDIF 文件:连接到名为“HQ-CON-DC-01”的服务器,并对“Marketing”OU 执行子树搜索以查找类别为“Person”的所有对象。输出文件将位于当前用户“Documents and Settings”目录的根目录中。

注意:objectCategory 是用于提高搜索性能的索引属性。

您可以使用该 LDIF 文件进行批量导入,将“Marketing”OU 中的所有对象导入到与 LDAP 兼容的任何其他目录中。某些属性可能不适用于其他的 LDAP 实现。尤其在使用该机制将对象导入到其他 Active Directory 中时,由于在创建对象期间将自动生成某些属性,因此必须将这些属性省略。(如果没有明确省略它们,操作将会失败。)

例如,除了添加参数 –m 外,用于省略这些属性的 LDIFDE 命令与上述命令相同。

ldifde -f marketing.ldf -s hq-con-dc-01 -d "ou=marketing,ou=accounts,dc=contoso,dc=com" -p subtree -r "(objectCategory=CN=Person,CN=Schema,CN=Configuration,DC=contoso,DC=com)" –m

修改对象

在以下示例中,整个“Marketing”组织搬到了新的办公地点。可通过修改省/自治区、街道、县/市以及邮政编码属性,使用 LDIF 对“Marketing”组织中的所有用户对象进行批量修改。

使用 LDIF 和“记事本”修改对象

1.

单击“开始”按钮,指向“所有程序”,指向“附件”,然后单击“命令提示符”。

2.

在命令提示符下,键入以下命令以提取所需的条目。

ldifde -f marketing.ldf -s hq-con-dc-01 -d "ou=marketing,ou=accounts,dc=contoso,dc=com" -p subtree –r "(objectCategory=CN=Person,CN=Schema,CN=Configuration,DC=contoso,DC=com)" -l "1,st,streetaddress,postalcode"

注意:在通用网络结构指南中,没有为“Marketing”OU 内的用户对象定义城市、省/自治区、地址以及邮政编码的条目。建议在执行该导出操作之前,为“Marketing”OU 中的每个用户对象填充这些字段。

3.

按“Enter”键。

4.

使用“记事本”打开“marketing.ldf”文件。

注意:如果您使用数据填充了每个用户对象,则结果应该与图 2 中显示的内容相似。

图 2.  检查 LDF 文件

图 2. 检查 LDF 文件

5.

在“记事本”中,修改“Marketing.ldf”中的每个用户对象条目,使之与图 3 的内容相似。注意:必须将文件保存为 .ldf 文件。

图 3.  修改 LDF 导入文件

图 3. 修改 LDF 导入文件

6.

关闭“记事本”。在“命令提示符”窗口中,键入:

ldifde –i -f marketing.ldf -s hq-con-dc-01

7.

按“Enter”键。结果应该与图 4 中显示的内容相似。

图 4.  成功导入 LDF 文件

图 4. 成功导入 LDF 文件

8.

要确认已相应修改了用户对象属性,请使用“Active Directory 用户和计算机”管理单元。(有关使用该管理单元的帮助,请参见 。)

注意:另一个名为 Csvde.exe 的实用工具执行与 Ldifde.exe 实用工具相同的功能,但是它使用逗号分隔的文件格式。使用该实用工具执行的导入操作只能“添加”对象,而不能修改或删除对象。Microsoft Excel 等应用程序支持逗号分隔值 (CSV) 文件格式。

创建和删除对象

以下示例中使用 LDIF 在 Active Directory 中添加和删除用户。

使用 LDIF 创建新用户

1.

单击“开始”按钮,单击“运行”,键入“Notepad Newuser.ldf”,然后单击“确定”。在出现相应提示时,单击“是”创建新的文件。

2.

将以下文本添加到文件中。

dn: CN=Pilar Ackerman,OU=Marketing,OU=Accounts,DC=contoso,DC=com

changetype: add

cn: Pilar Ackerman

objectClass: user

samAccountName: Pilar

givenName: Pilar

sn: Ackerman

3.

保存“newuser.ldf”文件,然后将其关闭。继续进行用户对象创建之前,检查是否将文件保存到了“Documents and Settings”目录中。

4.

在“命令提示符”窗口中,键入以下内容。

ldifde –i -f newuser.ldf -s hq-con-dc-01

5.

按“Enter”键。完成后,“命令提示符”窗口将确认修改(如图 5 所示)。

图 5.  添加新用户

图 5. 添加新用户

使用 LDIF 删除用户

1.

单击“开始”按钮,单击“运行”,键入“Notepad Deleteuser.ldf”,然后单击“确定”。在出现相应提示时,单击“是”创建新的文件。

2.

将以下文本添加到文件中。

dn: CN=Pilar Ackerman,OU=Marketing,OU=Accounts,DC=contoso,DC=com

changetype: delete

3.

保存“deleteuser.ldf”文件,然后将其关闭。

4.

在“命令提示符”窗口中,键入以下内容。

ldifde –i -f deleteuser.ldf -s hq-con-dc-01

返回页首

使用 VBScript 和 ADSI

ADSI 可以使支持目录的应用程序的开发工作更加轻松。您可以使用 VBScript 或 Microsoft JScript® 开发软件编写脚本以执行批量目录操作(与 Windows Script Host 一起使用)。在本指南中,使用 VBScript 编写的简单应用程序执行上一节描述的过程(它使用的是 LDIF)。

注意,这些脚本不包括任何错误检查,这意味着它们不提供 VBScript 和 ADSI 程序员参考。此处包含的所有示例都假设:您使用正确的凭据登录到作为目标域成员的计算机上。在 ADSI 中,可以明确指定凭据和目标域。完成每个过程后,请检查“Active Directory 用户和计算机”管理单元,确认条目已修改。

导出对象

本示例中使用文本编辑器(如“记事本”)来创建 VBScript 程序。该脚本搜索“Marketing”OU 并创建一个文本文件,该文件中将列出所有用户对象及其属性子集。

创建并执行导出脚本

1.

单击“开始”按钮,单击“运行”,键入“Notepad export.vbs”,然后单击“确定”。在出现相应提示时,单击“是”创建新的文件。将以下文本复制到“export.vbs”中。

'Global variables
    Dim oContainer
    Dim OutPutFile
    Dim FileSystem
'Initialize global variables
    Set FileSystem = WScript.CreateObject("Scripting.FileSystemObject")
    Set OutPutFile = FileSystem.CreateTextFile("marketing.txt", True) 
    Set oContainer=GetObject("LDAP://OU=Marketing,OU=Accounts,DC=contoso,DC=com")
'Enumerate Container
    EnumerateUsers oContainer
'Clean up
    OutPutFile.Close
    Set FileSystem = Nothing
    Set oContainer = Nothing
    WScript.Echo "Finished"
    WScript.Quit(0)
Sub EnumerateUsers(oCont)
    Dim oUser
    For Each oUser In oCont
        Select Case LCase(oUser.Class)
               Case "user"
                    If Not IsEmpty(oUser.distinguishedName) Then
                       OutPutFile.WriteLine "dn: " & oUser.distinguishedName
                    End If
                    If Not IsEmpty(oUser.name) Then
                       OutPutFile.WriteLine "name: " & oUser.Get ("name")
                    End If
                    If Not IsEmpty(oUser.streetAddress) Then
                       OutPutFile.WriteLine "streetAddress: " & oUser.streetAddress
                    End If
                    If Not IsEmpty(oUser.l) Then
                       OutPutFile.WriteLine "l: " & oUser.l
                    End If
                    If Not IsEmpty(oUser.st) Then
                       OutPutFile.WriteLine "st: " & oUser.st
                    End If
                    If Not IsEmpty(oUser.postalcode) Then
                       OutPutFile.WriteLine "postalcode: " & oUser.postalcode
                    End If
               Case "organizationalunit", "container"
                    EnumerateUsers oUser
        End Select
        OutPutFile.WriteLine
    Next
End Sub

2.

保存“export.vbs”,然后关闭“记事本”。

3.

在“命令提示符”窗口中,键入“export.vbs”,然后按“Enter”键。

注意:执行 export.vbs 操作可创建 Marketing.txt 文件,该文件包含用户及其属性子集的列表。

在进行适当的修改后,该脚本就可以与支持 Microsoft 组件对象模型 (COM) 和 Visual Basic 技术的任何应用程序一起使用了。这些应用程序包括 Visual Basic、Excel 以及 Microsoft Access。Internet Explorer 和 Internet 信息服务也支持脚本。

修改对象

在本示例中,将更改“Marketing”OU 内的所有用户地址属性。可使用简单的 VBScript 程序,对“Marketing”组织中的所有用户对象进行批量修改。该脚本修改省/自治区、街道、县/市以及邮政编码属性。

创建并执行修改对象脚本

1.

单击“开始”按钮,单击“运行”,键入“Notepad modify.vbs”,然后单击“确定”。在出现相应提示时,单击“是”创建新的文件。将以下文本复制到“modify.vbs”中。

Dim oContainer
    Set oContainer=GetObject("LDAP://OU=Marketing,OU=Accounts,DC=contoso,DC=com")
ModifyUsers oContainer
'cleanup
    Set oContainer = Nothing
    WScript.Echo "Finished"
    WScript.Quit
Sub ModifyUsers(oObject)
    Dim oUser
    oObject.Filter = Array("user")
    For Each oUser in oObject
        oUser.Put "st","Washington"
        oUser.Put "streetAddress","One Microsoft Way"
        oUser.Put "postalCode","98052"
        oUser.Put "l","Redmond"
        oUser.SetInfo
    Next
End Sub

2.

保存“modify.vbs”,然后关闭“记事本”。

3.

在“命令提示符”窗口中,键入“modify.vbs”,然后按“Enter”键。

创建和删除对象

本示例中使用 VBScript 将新用户添加到“Marketing”组织中。该示例说明可以使用 ADSI 和 VBScript 非常方便地以编程方式访问目录。注意,在本示例中,在用户创建期间只配置了一组有限的属性。

创建并执行对象创建脚本

1.

单击“开始”按钮,单击“运行”,键入“Notepad add.vbs”,然后单击“确定”。在出现相应提示时,单击“是”创建新的文件。将以下文本复制到“add.vbs”中。

Dim oContainer
Dim oUser
Set oContainer=GetObject("LDAP://OU=Marketing,OU=Accounts,DC=contoso,DC=com")
'Create user
        Set oUser = oContainer.Create("User","CN=Pilar Ackerman") 
'Assign values to user attributes
        oUser.Put "samAccountName","Pilar"
        oUser.Put "givenName","Pilar"
        oUser.Put "sn","Ackerman"
        oUser.Put "userPrincipalName","pilar@contoso.com"
        oUser.SetInfo
'Clean up
Set oUser = Nothing
Set oContainer = Nothing
WScript.Echo "Finished"
WScript.Quit

2.

保存“add.vbs”,然后关闭“记事本”。

3.

在“命令提示符”窗口中,键入“add.vbs”,然后按“Enter”键。

创建并执行对象删除脚本

1.

单击“开始”按钮,单击“运行”,键入“Notepad delete.vbs”,然后单击“确定”。在出现相应提示时,单击“是”创建新的文件。将以下文本复制到“delete.vbs”中。

Dim oContainer
    Set oContainer=GetObject("LDAP://OU=Marketing,OU=Accounts,DC=contoso,DC=com")
'Delete user
    oContainer.Delete "user","CN=Pilar Ackerman"
'Clean up
Set oContainer = Nothing
WScript.Echo "Finished"
WScript.Quit

2.

保存“delete.vbs”,然后关闭“记事本”。

3.

在“命令提示符”窗口中,键入“delete.vbs”,然后按“Enter”键。

返回页首

附录 — 使用 LDIFDE

语法

ldifde [-i] [-f FileName] [-s ServerName] [-c String1 String2] [-v] [-j Path] [-t PortNumber] [-d BaseDN] [-r LDAPFilter] [-p Scope] [-l LDAPAttributeList] [-o LDAPAttributeList] [-g] [-m] [-n] [-k] [-a UserDistinguishedName Password] [-b UserName Domain Password] [-?]

参数

-i

指定导入模式。如果没有指定,则默认模式为导出。

-f FileName

指定导入或导出文件名称。

-s ServerName

指定执行导入或导出操作的域控制器。默认情况下,Ldifde 在安装了该实用工具的域控制器上运行。

-c String1 String2

使用 String2 代替出现的所有 String1。通常在以下情况下使用此参数:从一个域向另一个域导入数据,并且需要将导出域的可分辨名称 (String1) 替换为导入域的可分辨名称 (String2)。

-v

设置详细模式。

-j Path

设置日志文件位置。默认为当前路径。

-t PortNumber

指定 LDAP 端口号。默认 LDAP 端口为 389。全局编录端口为 3268。

-d BaseDN

为数据导出设置搜索库的可分辨名称。

-r LDAPFilter

为数据导出创建 LDAP 搜索筛选器。例如,要导出所有具有特定姓氏的用户,您可使用以下筛选器:-r (and(objectClass=User)(sn=Surname))。

-p Scope

设置搜索范围。搜索范围选项有 Base、OneLevel 或 SubTree。

-l LDAPAttributeList

设置在导出查询结果中返回的属性列表。如果省略该参数,则返回所有属性。

-o LDAPAttributeList

设置在导出查询结果中省略的属性列表。通常在以下情况下使用此参数:从 Active Directory 中导出对象,然后将其导入到另一个与 LDAP 兼容的目录中。如果另一个目录不支持这些属性,可使用该选项在结果集中省略这些属性。

-g

省略分页搜索。

-m

省略仅应用于 Active Directory 对象的属性,如 ObjectGUID、objectSID、pwdLastSet 以及 samAccountType 属性。

-n

省略二进制值的导出。

-k

忽略导入操作期间的错误并继续处理。以下内容是忽略的错误的完整列表:

对象已经是组成员

所导入的对象没有其他属性时发生的对象类冲突(意味着指定的对象类不存在)

对象已存在

约束冲突

属性或值已存在

无此对象

-a UserDistinguishedName Password

将命令设置为使用提供的用户可分辨名称和密码来运行。默认情况下,使用当前登录到网络上的用户的凭据运行命令。

-b UserName Domain Password

将命令设置为使用提供的用户名域密码来运行。默认情况下,使用当前登录到网络上的用户的凭据运行命令。

-?

显示命令菜单。

注释

在创建用于 Ldifde 命令的导入文件时,可使用 changeType 值来定义导入文件包含的更改类型。您可以使用以下 changeType 值:

说明

Add

指定新内容包含在导入文件中。

modify

指定已在导入文件中修改现有内容。

delete

指定已在导入文件中删除内容。

以下内容是使用 add 值的 LDIF 导入文件格式示例。

DN: CN=SampleUser,DC=DomainName

changetype: add

CN: SampleUser

description: DescriptionOfFile

objectClass: User

sAMAccountName: SampleUser

示例

若要只检索返回对象的可分辨名称、公用名称、名、姓以及电话号码,请键入:

-l DistinguishedName, CN, GivenName, SN, Telephone

要省略对象 GUID,请键入:

-o whenCreated, whenChanged, objectGUID

格式说明

格式含义

斜体

用户必须提供的信息

粗体

用户必须完全按显示内容准确键入的元素

省略号 (...)

可以在命令行中多次重复使用的参数

中括号内 ([])

可选项

大括号内 ({}) 用竖线 (|) 分隔的选项。例如:{even|odd}

选项集,用户只能从其中选择一个

Courier 字体

代码或程序输出

返回页首

其他资源

有关更多信息,请参见以下资源。

LDAP 数据交换格式 (LDIF) — 技术规范,网址为:

Microsoft Visual Basic Scripting 技术,网址为:

有关 Windows Server 2003 的最新信息,请参见 Windows Server 2003 Web 站点,网址为:


返回页首
阅读(1171) | 评论(0) | 转发(0) |
0

上一篇:Shell编程基础

下一篇:SMTP Commands

给主人留下些什么吧!~~