强制域控制器复制





3.00/5 (2投票s)
2003年9月24日
1分钟阅读

72753
强制在 Windows AD 企业网络中进行复制。
引言
在 W2000 企业环境中遇到的一个问题是,Active Directory 信息的复制可能需要一段时间(根据站点信息)。这尤其在无人值守安装期间是一个问题。问题在于这在 W2000 中并不是很容易实现。许多管理员在从 NT4 迁移到 2000 时会缺失此功能。W2000 中有一个工具允许一个域控制器与另一个域控制器进行复制,但使用该工具处理多个 AD 并不方便。您需要维护一个包含每台 DC 一行的批处理文件。用于复制 DC 信息的工具是 repadmin。
解决方案
为了解决这个问题,我编写了这个简单的 VB 脚本。它只是使用 LDAP 从 AD 读取所有 DC,并在单独的命令框中启动复制工具,这使其也具有多线程功能 ;-)
将以下文本复制到 VBS 文件中,并修改以下内容
MyMainDC
-> 主域控制器名称mydomain.com
-> 您的域名dc=mydomain,dc=com
-> 您的域名
MyMainDC
的目的是避免主域控制器与自身同步。
随时运行此脚本文件以复制整个域。
对我来说,这足以克服我的问题。另一种选择是考虑站点信息。由于此处未这样做,因此您可能需要运行此脚本两次。也许有一天我会更改它。
'***********************************************
'
' Replicate.vbs
' (c) 2003, Computech, Author: Peter Verijke
'
'***********************************************
Option Explicit
Dim objDSE, strDN, objContainer, objChild, sCommand, WshShell
Set objDSE = GetObject("LDAP://rootDSE")
strDN = "OU=Domain Controllers," & objDSE.Get("defaultNamingContext")
Set objContainer = GetObject("LDAP://" & strDN)
sCommand = "%COMSPEC% /C "
Set WshShell = WScript.CreateObject("WScript.Shell")
objContainer.Filter = Array("Computer")
For Each objChild In objContainer
if Ucase(mid(objChild.Name,4)) <> "MyMainDC" then
WshShell.Run(sCommand & "if exist \\" & _
mid(objChild.Name,4) & "\Sysvol repadmin /syncall " _
& mid(objChild.Name,4) & _
".mydomain.com dc=mydomain,dc=com /force")
end if
Next