65.9K
CodeProject 正在变化。 阅读更多。
Home

强制域控制器复制

starIconstarIconstarIconemptyStarIconemptyStarIcon

3.00/5 (2投票s)

2003年9月24日

1分钟阅读

viewsIcon

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
© . All rights reserved.