如果您负责处理列有从下周开始工作的 名新员工资料的 Excel 电子表格或者由于技术支持人员点击了某些不应点击的内容而导致用户帐户配置错误 或者您只是需要除了打开用户和计算机之外的一种更加轻松的方法来管理 Active Directory??则有大量免费管理工具可以提供帮助有些工具内置于 Windows?? 操作系统中有些位于资源工具包或 Windows 支持工具中而有些甚至是免费的第三方工具这些便捷工具都包括什么可以从何处获取?让我们来了解一下 首先介绍 Windows Server?? 中的内置命令行工具这些工具允许您在 Active Directory 中创建删除修改和查找对象 CSVDE 逗号分隔值数据交换工具(即 CSVDE)允许您使用 CSV 源文件将新对象导入到 Active Directory 中此外该工具还提供了将现有对象导出到 CSV 文件的功能CSVDE 不能用于修改现有对象在导入模式下使用此工具时您只能创建全新的对象 使用 CSVDE 导出现有对象的列表相当简单将 Active Directory 对象导出到名为 adcsv 的文件方法如下 csvde –f adcsv –f 开关表示后面为输出文件的名称但是您必须注意根据环境的不同此基本语法可能会生成不实用的大型输出文件要将此工具限制为仅导出特定组织单位 (OU) 中的对象可以将语句修改为如下形式 csvde –f UsersOUcsv –d ou=Usersdc=contosodc=com 进一步假定您只对将用户对象导出到 CSV 文件感兴趣如果是那样的话您可以添加 –r 开关和 –l 开关前者允许指定轻型目录访问协议 (LDAP) 筛选器进行搜索后者可以限制导出的属性的数量(请注意以下所有内容位于一行) csvde –f UsersOnlycsv –d ou=Usersdc=contosodc=com –r (&(objectcategory=person)(objectclass=user)) –l DNobjectClassdescription 通过 –i 开关您可以将对象从源 CSV 文件导入到 Active Directory但是使用 CSVDE 创建用户对象存在一个关键限制不能使用 CSVDE 设置用户密码因此应该避免使用 CSVDE 创建用户对象 LDIFDE Active Directory 还提供了另外一个用于执行批量用户操作的内置工具称为 LDIFDE与 CSVDE 相比此工具更强大更灵活除了可以创建新对象外LDIFDE 还可以修改和删除现有对象甚至扩展 Active Directory 架构LDIFDE 虽然具有灵活性但为了实现这种灵活性却必须要使用扩展名为 ldf 的 LDIF 文件作为输出文件这种文件与简单的 CSV 文件相比格式更复杂(只需少量操作就可以配置好用户密码我稍后将对此进行介绍) 我们从一个简单的示例开始将某个 OU 中的用户导出到 LDF 文件中(请注意以下所有内容位于一行) ldifde f usersldf s d ou=UsersOUdc=contosodc=com –r (&(objectcategory=person)(objectclass=user)) 与大多数命令行工具一样您可以通过运行 LDIFDE /? 命令找到 LDIFDE 开关的完整说明图 介绍了我在此使用过的开关(注意 CSVDE 和 LDIFDE 命令的开关实际上是相同的) LDIFDE 的真正功能在于创建和操作对象然而进行此操作之前您首先需要创建一个输入文件以下语句创建两个名为 afuller 和 rking 的用户帐户要创建该输入文件请在记事本(或者您喜欢的纯文本编辑器)中输入以下文本然后将其保存为 NewUsersldf dn CN=afuller OU=UsersOU DC=contoso DC=com changetype add cn afullerobjectClass user samAccountName afuller dn CN=rking OU=UsersOU DC=contoso DC=com changetype add cn rkingobjectClass user samAccountName rking 创建完该文件后请运行以下命令 ldifde –i –f NewUsersldf –s 您可能会猜到此处使用的唯一新开关 i 表明这是一项导入操作而非导出操作 如果要修改或删除现有对象不必更改 LDIFDE 命令的语法相反您应该修改 LDF 文件中的内容要更改用户帐户的说明字段请创建名为 ModifyUsersldf 的文本文件如图 所示 图 ModifyUsers LDF 文件 您可以通过运行与之前相同的 LDIFDE 命令语法在 f 开关后面指定新的 LDF 文件名来导入更改用于删除对象的 LDF 格式更简单要删除一直使用的用户请创建一个名为 DeleteUsersldf 的文件然后输入以下内容 dn CN=afuller OU=UsersOU DC=contoso DC=com changetype deletedn CN=rking OU=UsersOU DC=contoso DC=com changetype delete 注意与 CSVDE 不同LDIFDE 能够配置用户密码不过在为用户帐户配置 unicodePWD 属性之前必须在域控制器上配置安全套接字层/传输层安全性 (SSL/TLS) 加密 而且LDIFDE 能够创建和修改任何类型的 Active Directory 对象并不仅限于用户帐户例如下面的 LDF 文件可在 林的架构中创建名为 EmployeeIDexample 的自定义架构扩展 dn cn=EmployeeIDexamplecn=Schemacn=Configurationdc=contosodc=comchangetype addadminDisplayName EmployeeIDExampleattributeID attributeSyntax cn EmployeeIDinstanceType isSingleValued TruelDAPDisplayName employeeIDexample 由于 LDIFDE 文件使用工业标准 LDAP 文件格式因此需要修改 Active Directory 架构的第三方应用程序会经常提供 LDF 文件您可以在将这些更改应用于生产环境之前使用这些文件检查和批准更改 除了用于执行批量导入和导出操作的工具外Windows Server 还包括一个内置工具集您可以使用它来创建删除和修改各种 Active Directory 对象还可以对符合特定条件的对象执行查询(请注意 Windows Active Directory 并不支持这些工具如 dsadddsrmdsget 和 dsquery 等) dsadd Dsadd 用于在特定的目录分区上创建 Active Directory 对象类的实例这些类包括用户计算机联系人组组织单位和配额Dsadd 具备一个由下列内容组成的通用语法 dsadd <ObjectType> <ObjectDistinguishedName> attributes 请注意您创建的每个对象类型都有一组特定的开关它们与该类型的属性相对应以下命令创建一个填充了各种属性的用户对象(请注意以下所有内容位于一行) dsadd user cn=afullerou=ITdc=contosodc=com –samID afuller –fn Andrew –ln Fuller –pwd * memberOf cn=ITou=Groupsdc=contosodc=com cn=Help Deskou=Groupsdc=contosodc=com –desc Marketing Director –memberOf 开关要求指定应添加该用户的每个组的完整可分辨名称 (DN)如果要将用户添加到多个组您可以添加多个 DN 并用空格分隔开 任何元素如果包含空格(如 Help Desk 组的 DN)则该元素应该括在双引号中如果某个元素含有反斜槓(如称为 IT\EMEA 的 OU)则必须输入两次反斜槓IT\\EMEA(这些要求适用于所有的 ds* 工具) 如果使用 pwd * 开关则系统将提示您在命令行输入用户密码您可以在该命令中指定密码 (pwd P@ssword)但是这样会在屏幕上或该命令嵌入到的任何文本或脚本文件中以纯文本形式显示该密码 同样您可以使用下列两个命令创建组对象和 OU dsadd computer cn=WKSou=Workstationsdc=contosodc=comdsadd ou ou=Training OUdc=contosodc=com Dsmod Dsmod 用于修改现有对象它的使用方法与 dsadd 非常相似您需要根据要修改的对象的类型使用不同的子菜单和语法以下 dsmod 语句会更改用户的密码并修改该用户的帐户因此在下次登录时系统会提示该用户更改为新的密码 dsmod user cn=afullerou=ITdc=contosodc=com –pwd P@sswrd –mustchpwd yes 要了解这些开关多么相似您可以查看要用于创建此用户并配置了相同属性的 dsadd 语法 dsadd user cn=afullerou=ITdc=contosodc=com –pwd P@sswrd –mustchpwd yes 您可以清晰地看到如果知道 dsadd 中用于创建对象的开关则可以使用那些相同的开关修改 dsmod 用户 dsrm dsrm 与 dsadd 是相逆的正如您可能想到的使用此工具可从命令行中删除对象基本的 dsrm 语法相当简明只需输入 dsrm 后输入要删除对象的可分辨名称即可如下所示 dsrm cn=WKSou=Workstationsdc=contosodc=com 默认情况下dsrm 会提示确实要删除此对象吗?此时键入 Y然后按 Enter您可以使用 –noprompt 开关禁止显示此提示但很明显这样做无法在删除对象之前确认所选对象是否正确如果要删除容器对象(即在其内部可能包含其他对象的组织单位)另外两个开关可能会很有用以下命令将删除 TrainingOU 组织单位及其内部包含的所有对象 dsrm ou=TrainingOUdc=contosodc=com –subtree 以下命令将删除包含在 TrainingOU 中的所有子对象但保留组织单位对象本身 dsrm ou=TrainingOUdc=contosodc=com –subtree –exclude dsmove 要移动或重命名 Active Directory 中的对象请使用 dsmove 工具但请注意您只应使用该工具在单一域中移动对象要在域和林之间迁移对象请使用 Active Directory 迁移工具 (ADMT)可从 Microsoft 网站免费下载Dsmove 依赖于两个开关它们可以单独使用也可以结合在一起使用以下命令将为 Steve Conn 的帐户指定新姓氏 dsmove cn=Conn Steveou=ITdc=contosodc=com –newname Steve Conn 以下命令将 Steve 的帐户从 IT OU 移动到 Training OU dsmove cn=Conn Steveou=ITdc=contosodc=com –newparent ou=Trainingdc=contosodc=com 您可以通过同时指定这两个开关将重命名和移动合并为一个操作如下所示 dsmove cn=Conn Steveou=ITdc=contosodc=com –newname Steve Conn –newparent ou=Trainingdc=contosodc=com Dsget 和 Dsquery ds* 命令行工具集还包括两个用于查询 Active Directory 获取信息而非用于创建或修改对象的工具 Dsget 将对象的 DN 作为输入并为您提供您指定的一个或多个属性的值Dsget 使用与 dsadd 和 dsmod 相同的子菜单 — usercomputercontactgroupou 和 quota 要获得用户帐户的 SAM 帐户名和安全标识符 (SID)请键入以下命令(请注意以下所有内容位于一行) dsget user cn=afullerou=ITdc=contosodc=com –samAccountName –sid 您将会得到如图 所示的输出 图 运行 dsget Dsquery 将返回一个符合您指定条件的 Active Directory 对象的列表无论您使用的是哪个子菜单都可以指定以下参数 dsquery <ObjectType> <StartNode> s <Search Scope> o <OutputFormat> 对于 ObjectTypedsquery 可以使用以下子菜单每个子菜单都具有自己的语法computercontactsubnetgroupousiteserver(请注意服务器子菜单检索有关域控制器的信息而不是环境中的任一成员服务器)userquota 和 partition如果其中一个查询类型不符合需要您可以使用 * 子菜单这样您可以输入任意格式的 LDAP 查询 StartNode 指定搜索在 Active Directory 树中的开始位置您可以使用特定的 DN如 ou=ITdc=contosodc=com 或下列其中一个快捷说明符domainroot从特定域的根目录开始forestroot从使用全局编录服务器执行搜索的林根域的根目录开始 最后搜索范围选项指定 dsquery 搜索 Active Directory 树的方式Subtree(默认方式)查询指定的 StartNode 及其所有子对象onelevel 仅查询 StartNode 的直接子项base 仅查询 StartNode 对象 为了更好地理解搜索范围假定有一个 OU其中包含用户对象和一个子 OU该子 OU 自身又包含其他对象使用 subtree 范围将查询该 OU包含在该 OU 内的所有用户对象和子 OU 及其内容onelevel 范围仅查询包含在 OU 中的用户而不查询子 OU 及其内容base 查询仅搜索 OU 本身而不查询其中包含的任何对象 最后您可以使用 Output Format 控制如何设置 dsquery 的结果的格式默认情况下dsquery 将返回与查询相匹配的所有对象的可分辨名称如下所示 cn=afullerou=Trainingdc=contosodc=comcn=rkingou=ITTrainingou=Trainingdc=contosodc=com 要查询 IT OU 和任意子 OU 中包含的所有用户对象请使用以下命令 dsquery user ou=ITdc=contosodc=com 您可以通过添加其他开关进一步细化此查询如 disabled(仅返回已禁用的用户帐户)inactive x(仅返回在过去 x 周或更久未登录的用户)或 stalepwd x(仅返回在 x 天内或更久未更改其密码的用户) 依据目录中对象的数目在运行查询时您可能需要指定 limit x 开关默认情况下dsquery 将会返回多达 个与查询细节相匹配的对象您可以指定更大的数目(如 limit )或使用 limit 指示 dsquery 返回所有匹配对象 也可以使用其他子菜单执行对其他对象类型的有用查询考虑以下查询此查询将返回在 Active Directory 站点和服务中定义的位于 xx 地址空间中的每个子网 dsquery subnet –name * 或使用以下命令返回位于 Corp 站点中的每个子网 dsquery subnet –site Corp 使用另一个子菜单您可以很快确定林中配置为全局编录服务器的域控制器的数量 dsquery server –forest –isgc 您还可以使用此语法帮助确定域中哪个域控制器承载主域控制器 (PDC) 模拟器灵活单主机操作 (FSMO) 角色 dsquery server –hasfsmo pdc 与其他包含子菜单的 ds* 命令一样您可以转到命令提示符并键入 dsquery user /?dsquery computer /?dsquery subnet /? 等查看特定 dsquery 子菜单中可用的所有开关 另一个灵活的技巧是使用管道字符(在美式键盘上按下 shift 的同时按反斜槓即可)将 dsquery 的输出通过管道传送到其他工具(如 dsmod)中例如假设您的公司已将 Training 部门重命名为 Internal Development现在您必须将每位相关用户的说明字段从旧部门名称更改为新名称在单一命令行上您可以查询具有 Training 的说明字段的用户对象然后批量修改该说明字段如下所示 dsquery user –description Training | dsmod description Internal Development 一些第三方产品 由于 Active Directory 基于 LDAP 标准您可以使用任何支持 LDAP 的工具对其进行查询和修改许多第三方供应商已发布了收费的工具帮助您管理 Active Directory但有时您会发现为社区免费提供的极具价值的工具目录服务 MVP Joe Richards 创建的集合就是这种情况可以从 /freetools 下载在那里您将会发现大量具有不同功能的工具我反复使用的有 adfindadmod 和 oldcmp 这三种工具 Adfind 和 Admod Adfind 和 admod 类似于 dsquery 和 dsmodadfind 是 Active Directory 的命令行查询工具admod 能够创建删除或修改一个或多个 Active Directory 对象 与具有多个子菜单并且开关依据对象类型而异的 ds* 工具不同adfind 和 admod 具有一致的语法与要尝试执行的查询或修改类型无关adfind 的基本语法为 adfind –b <Search Base> s <Search Scope> f <Search Filter> attributesDesired 所以对域中所有计算机对象的 DN 和说明的查询应为 adfind –b dc=contosodc=com –s subtree –f (objectclass=computer) dn description 对所有用户对象的查询如下所示 adfind –b dc=contosodc=com –s subtree –f (&(objectcategory=person) (objectclass=user)) dn description 注意除了 LDAP 查询的内容外语法没有任何更改 使用 adfind 时您将发现许多快捷操作符可以减少许多键入内容例如default 开关可以取代上一示例中的 b dc=contosodc=com 并搜索整个域gc 搜索垃圾收集 (GC) 并返回 Active Directory 林中所有的用户还可以使用 rb 开关设置相对搜索库如果要在 域中搜索 Training OU您可以通过仅仅指定 –default –rb ou=Training而非 –b ou=Training dc=phldc=eastdc=usdc=contosodc=com从而减少许多工作量 另外adfind 还可以执行在命令行中不能轻松管理的许多高级搜索功能如图 所示 使用 –asq 开关显示 HelpDesk 成员的组成员身份的示例如下所示 adfind –default –rb cn=HelpDeskou=IT –asq member memberOf 顾名思义admod 用于修改 Active Directory 中的对象与 adfind 一样不需要记住有特殊语法的特定子菜单admod 在任何时候都使用相同的语法与要处理的对象类型无关还可以使用 admod 添加移动重命名删除甚至恢复对象只需通过添加相应的开关(如 addrmmoveundel)即可实现就像 dsquery 和 dsmod 一样您也可以使用 | 字符将 adfind 查询的结果通过管道传送到 admod 请注意使用 admod 执行恢复操作只能执行逻辑删除恢复操作在此操作中大部分对象属性已被删除要完全还原某个对象及其所有属性您仍需要执行该对象的授权还原 Oldcmp 还有一个 joeware 工具我认为它是自动工具包中必不可少的一部分oldcmp该工具会扫描 Active Directory 数据库查找在指定周数内未使用的计算机帐户而且可以执行以下操作 * 创建帐户报表而不对其进行任何操作 * 禁用未使用的计算机帐户 * 将计算机帐户移动到另一个指定的 OU 中 * 完全删除计算机帐户 请注意由于 oldcmp 可能会严重损坏您的目录因此它有许多内置的安全功能它不会删除尚未禁用的任何帐户(无需手动指定No really I mean it!命令行开关)无需指定类似的No really I mean it!开关每次修改对象不会超过 个而且绝对不会对域控制器的计算机帐户执行任何操作 现在尽管工具的名称易于误导但是 Joe 已更新了 oldcmp以便对在特定时间内未使用的用户帐户也能执行相似的功能 对于一个小型 Active Directory 环境或每次只执行一两个添加或更改操作的环境GUI 工具(如 Active Directory 用户和计算机)可能足以满足日常管理需要但是如果您每天都要添加和修改大量对象或者只是需要更加简化地管理任务解决方案则改用命令行可以大大加快在 Active Directory 中创建修改和删除对象的过程您已经了解到有许多灵活且功能强大的工具可以免费获得它们或者内置于 Windows 中或者可从 Active Directory 社区成员中下载这些工具中的任何一个都能够大大提高 Active Directory 管理员的工作效率与此同时它们在您的日常工作中变得更加必要 |