有传言说微软正计划去掉Ntdsutil.exe,该工具从Windows 2000开始就提供到各种活动目录功能的命令行访问。Ntdsutil已经成为我调试活动目录问题的常用工具,但是我却发现,尽管在Windows Server 2008和R2中Ntdsutil增加了许多功能来提高易用性,仍然只有很少一部分管理员使用它。
Ntdsutil功能很强大,但也很危险。问题就在于某些Ntdsutil命令要求活动目录处于脱机状态。在Windows 2000和2003中,通过重启域控制器和开启目录服务还原模式(Directory Services Restore Mode,DSRM)完成活动目录的脱机。这是唯一一种完成语义数据库检查(semantic database checker)等操作的方法。
然而,重启DC(两次)并不是我们希望的,但是在维护窗口时经常会要求有这样的操作。重启并进入DSRM(通常要求安全模式)会导致所有的服务都脱机,虽然我们不推荐这么做,但这种做法却相当普遍。
幸运的是,Windows Server 2008中引入了一个很不错的新选项,可以将活动目录服务安装为可以脱机使用的服务(见图1)。当活动目录域名服务(Active Directory Domain Services,AD DS)关闭后,Ntdsutil就可以在不重启的情况下进行语义数据库分析。
图1:活动目录域名服务
Ntdsutil命令介绍
那么让我们来看看Windows Server 2008和R2版的Ntdsutil,学习一些强大的操作,说不定某天就能让你少打一个技术支持电话:
- 元数据清理:允许删除服务器、站点、域以及命名上下文对象(当你必须手动降级DC或有一些损坏对象时这特别有用。)
- 文件*:管理活动目录数据库文件(这个不常用,但是还是有一些很有用的命令)
- 组成员评估:显示主要的安全信息
- 角色:管理FSMO角色
- IFM(从介质安装)*:捕获活动目录的快照,然后在dcpromo的介质安装过程中使用
- 语义数据库分析*:查找并修复数据库错误
- 快照:管理快照,包括列举、安装和卸载快照
- 授权还原:将域控制器还原到某个特定时间点
这些操作要求在活动目录域名服务停止的情况下进行。
注:虽然在过去,活动目录轻型目录服务( Active Directory Lightweight Directory Services,AD LDS)使用dsdbutil和dsmgmt这两个工具来管理AD LDS实例,但微软实际上已将这些工具整合到Ntdsutil中了。我不会在这里讨论AD LDS的详细功能,但我们必须意识到现在所有的管理功能都在AD LDS中了,这点很重要。
有几个技巧可以帮助管理员迅速熟悉Ntdsutil工具。初学者应知道,命令可以用缩写,这意味着你只要输入足够的字母就可以唯一定义Ntdsutil命令。例如,要使用元数据清除命令,你只需键入“meta cl”。另外,管理员还可以使用方向键调出曾用的命令。
Ntdsutil还包括了一个退出选项,在任何菜单级别选择该选项,都会进入上一级菜单。^C则表示退出整个Ntdsutil。连接选项会在很多Ntdsutil命令中出现,如元数据清除,如图2所示。它定义了一个到某一特定域控制器的链接。当这个命令出现时,你只需进入连接菜单然后输入:
Connections: Con To Ser <域控制器名,如ATL-DC1>
操作会在该域控制器复制的活动目录生效。你可以使用已登录用户的密码,或者另外指定一个。
图2:Ntdsutil元数据清除命令
Ntdsutil也有一个在线帮助组件,如图3所示。多年来我曾多次使用这个工具,我还总是在任一菜单级别中键入?来快速显示可用的选项。
对于在线帮助,有几个变化需要注意。例如,授权还原操作现在需要一个实例的定义。这与Ntdsutil管理AD LDS分区的方式有关。如果你得到错误提示,要求你指定一个实例,那么你可以使用如下的命令:
Ntdsutil:Activate Partition ntds(或选择合适的AD LDS实例进行管理)。
图3:Ntdsutil帮助组件#p#
Ntdsutil:文件
Files命令要求停止活动目录域服务器。 以下几个命令较为常用:
- Checksum --检查引擎数据库的物理完整性。当数据库报错,尤其是在事件日志中,你可以使用该命令,也可以使用主菜单上的语义数据检测器。
- Integrity--该命令非常类似于Checksum,但是运行不同的检查。
- Set default folder security--该命令用于重设NTDS文件夹上的安全设置。这个命令不常用,除非你不小心误操作了NTDS文件夹,不得不重新恢复。
- Move logs to %S and Move DB to %S--该命令用于移动数据库和日志文件。
虽然我们不会每天都用到这些命令,但是如过你看到在事件日志中出现了数据库错误时,Integrity 和Checksum命令就能马上派上用场。你也可以使用语义数据库检测去检测数据库的一致性。
Ntdsutil:语义数据库分析
这是个功能强大的命令,而且非常容易使用。 在任何时候,只要在事件日志中看到数据库错误,我都会使用它。老实说,这个是我唯一使用的命令。
Semantic Checker: Go Fixup
此命令可以快速地进行完整性检查,根据我的经验,该命令每次都可以成功修复数据库。当然,不能保证它能修复所有数据库问题,但是它肯定不会带来任何新问题。此命令可以和上面提及的Ntdsutil:Files中的数据库修复命令一起使用。
Ntdsutil:组成员评估
这个选项为用户或组在安全令牌中存储安全标识符(SID)。虽然有一些老的资源工具包中的工具也能执行该操作,但是能把该工具整合到Ntdsutil确实非常棒。使用该命令前,需要先使用Set Global Catalog 或 Set Resource DC 命令去定义GC/DC。
Run Corp.com olseng
该命令会是一个五个步骤的操作过程,结果保存到C:\ olseng-20110217024622.tsv(包括所有安全信息的文本文件)。
正如你所看见的,Ntdsutil非常强大。因篇幅所限,还有很多有用的命令选项不能一一介绍。请记住对于安全、账户管理、分区管理、LDAP策略和其它AD LDS分区选项,Ntdsutil都是一个非常方便的命令,当然,有时候也很危险。通常,Ntdsutil会提供警示信息来让你自我保护。 记住一点,无论做什么,在点击回车时,一定要清楚知道自己正在做什么。
现在我们就来看看Windows Server 2008中Ntdsutil命令的详细功能,来进一步认识它的强大功能。
Ntdsutil:元数据清理
该命令是所有Ntdsutil命令中最常用的一个,至少我这样认为。早在Windows 2000中就有了该命令,它主要是在手动执行了域控制器提升操作(dcpromo)后用于清除活动目录对象。Ntdsutil元数据清除命令需要使用连接菜单连接活动目录控制器。
元数据清理要求明确指出相关站点、域、命名上下文和服务器来定位需要删除的对象。该操作是通过元数据清除菜单中的选择操作对象(SelOT)命令来实现的。例如,如果我想从SelOT目录中删除ALT-DC4这个对象,我首先可以输入“?”命令符来了解该命令的语法参数,如图4所示。
图 4:使用SelOT命令
为了指定站点、域和服务器,你必须列出所有站点来得到一个相关编号,该编号会在选择命令时使用。以下就是如何操作:
- 使用 List sites 命令:
select operation target: list sites
发现 6个 site(s)
0 - CN=Alpharetta,CN=Sites,CN=Configuration,DC=Wtec, DC=adapps,DC=hp,DC=com
1 - CN=Brussels,CN=Sites,CN=Configuration,DC=Wtec,
DC=adapps,DC=hp,DC=com
2 - CN=Melbourne,CN=Sites,CN=Configuration,DC=Wtec,
DC=adapps,DC=hp,DC=com
3 - CN=Bracknell,CN=Sites,CN=Configuration,DC=Wtec,
DC=adapps,DC=hp,DC=com
4 - CN=Roseville,CN=Sites,CN=Configuration,DC=Wtec,
DC=adapps,DC=hp,DC=com
5 - CN=Site1,CN=Sites,CN=Configuration,DC=Wtec,
DC=adapps,DC=hp,DC=com
- 现在可以使用Select site命令。我们想处理的服务器是site 1 – Brussels:: select operation target: sel site 1(注意 “1”是Brussels在LIST sites命令中的相关编号。)输出如下:
Site -CN=Brussels,CN=Sites,CN=Configuration,DC=Wtec,DC=adapps,DC=hp,DC=com
No current domain
No current server
No current Naming Context
- 为域名和服务器重复该过程。每次使用list命令(如List domains),获取你想处理对象的相关编号,然后在使用Select domain (#) 命令。一旦完成了这些操作,您就能看到类似图5中的结果。虽然读起来有点费劲,但是至少指定了站点、域和服务器。
图5: SelOT命令的输出例子
- 要删除一个已指定的服务器对象,请使用Quit回到Ntdsutil元数据菜单,然后使用remove命令:
Remove selected server
你会看到一个弹出窗口通知服务器将被删除,如图6所示。当你在处理活动目录中的对象时,请一定要小心使用这个命令。
图 6:服务器删除确定对话框 #p#
Ntdsutil:角色
这是查看、夺取并转移灵活单主机操作(Flexible Single Master Operations ,FSMO)角色的最快办法。在使用该命令时,有几点要注意:
- 在FSMO维护(Role)菜单中,进入Connection菜单连接到域控制器,该域控制器是你想转移角色的目的地。这非常重要。
Connections: Connect to server Wtec-dc1
- 退回到FSMO维护菜单(如图7所示)
Figure 7:FSMO维护菜单
- 图7显示命令选项和详细的解释。
- 想使用Ntdsutil命令查看所有角色,进入选择操作目标菜单,然后输入所选服务器的角色列表(如图7)。虽然输出不好看,但是涵盖了所有你想要的内容。使用Netdom命令可以获取更详细的信息。
Netdom Query Fsmo
- 你可以使用如下命令,夺取PDC角色Fsmo Maintenance: Seize PDC
请注意,任何夺取操作都会先自动尝试转换。Ntdsutil的优点就是可以一次性管理所有FSMO角色。
Ntdsutil:IFM
从介质安装是Windows 2008上的新功能,能通过域控制器提升操作(dcpromo) 安装向导使用高级安装选项建立一个新的域控制器,比windows 2003要快得多。在执行这个选项前,会要求对DC做一次备份,此后恢复文件会复制到服务器的本地介质中。域控制器提升操作(dcpromo) /ADV发出指令称要对首次升级使用静态恢复文件而不是通过网络。图8显示IFM菜单选项和一个创建完整实例的例子。包括如下操作:
- 创建完整的SYSVOL活动目录实例和非SYSVOL完整实例
- 创建SYSVOL和非SYSVOL只读域控制器 (RODC)实例
图 8: Ntdsutil IFM快照
IFM创建一个快照,首先会进行数据库碎片整理,然后保存快照到你指定的硬盘文件夹中。
Create sysvol full c:\adbackup
在C:\adbackup中将会有三个目录,分别是:Active Directory、Registry和SYSVOL,这里面的所有文件都会在执行dcpromo操作时用到。
使用IFM命令,能很容易地从现有域控制器上获得安装所需的活动目录资源,就好像是向待提升的服务器,进行一个简单的复制操作。IFM使得升级服务器来作为域控制器变得异常简单。一旦域控制器提升操作(dcpromo)结束,复制将立即进行以保证及时更新。请注意,一个只读域控制器(read-only domain controller, RODC)实例会在读/写域控制器中创建,但是只有只读域控制器实例自己能创建一个只读域控制器实例。
正如你所看见的,Ntdsutil非常强大。因篇幅所限,还有很多有用的命令选项不能一一介绍。请记住对于安全、账户管理、分区管理、LDAP策略和其它AD LDS分区选项,Ntdsutil都是一个非常方便的命令,当然,有时候也很危险。通常,Ntdsutil会提供警示信息来让你自我保护。 记住一点,无论做什么,在点击回车时,一定要清楚知道自己正在做什么。
【编辑推荐】