症状

当您在 Windows Server 2008 上运行 Adprep /rodcprep 命令时, 您会收到以下错误消息: Adprep 无法联系分区 DC 的...

当您在 Windows Server 2008 上运行 Adprep /rodcprep 命令时, 您会收到以下错误消息:

Adprep 无法联系分区 DC 的复制副本 = DomainDnsZones,DC = Contoso,DC = com
Adprep 无法分区 DC 上的操作 = DomainDnsZones,DC = Contoso,DC = com 跳过下一分区。

Adprep 无法联系的分区的副本 DC = ForestDnsZones,DC = Contoso,DC = com
Adprep 遇到了一个 LDAP 错误。错误代码: 0x0。服务器扩展的错误代码: 0x0,服务器错误消息: (null)。

Adprep 无法分区 DC 上的操作 = ForestDnsZones,DC = Contoso,DC = com 跳过下一分区。
Adprep 完成,但有错误。更新不是所有的分区。

回到顶端

 

原因

Adprep /rodcprep 命令试图联系树林中每个应用程序分区的基础结构主机时,会出现此问题。命令有此选项以设置所需的只读域控制器 (RODC) 复制的权...

Adprep /rodcprep 命令试图联系树林中每个应用程序分区的基础结构主机时,会出现此问题。命令有此选项以设置所需的只读域控制器 (RODC) 复制的权限。如果满足下列条件之一为真,Adprep /rodcprep 命令失败:

  • 该分区或分区不再在错误信息中引用的存在。

  • 结构主机的被引用的分区或分区已强制降级或处于脱机状态。

回到顶端

 

解决方案

若要解决此问题,如果该分区不再存在,请执行为孤立的分区使用 Dsmgmt 工具的"删除 nc"参数的元数据清除操作一次。有关详细的信息,请访问下面的 Micro...

若要解决此问题,如果该分区不再存在,请执行为孤立的分区使用 Dsmgmt 工具的"删除 nc"参数的元数据清除操作一次。有关详细的信息,请访问下面的 Microsoft 网站:

http://technet.microsoft.com/en-us/library/cc730970(WS.10).aspx (http://technet.microsoft.com/en-us/library/cc730970(WS.10).aspx)

如果指定的分区指定分区的在线的基础结构角色所有者。在"更多信息"一节中所述,您都可以通过手动修改该的对象 fSMORoleOwner 属性来执行此操作。

回到顶端

 

更多信息

下面的脚本示例修改基础架构对象的该指定非域命名上下文 (NDNC) 到活动,或 contactable,服务器上的 fSMORoleOwner 属性。此示例中的...

下面的脚本示例修改基础架构对象的该指定非域命名上下文 (NDNC) 到活动,或 contactable,服务器上的 fSMORoleOwner 属性。此示例中的 NDNC 是在 DomainDnsZones,DC = contoso,DC = com NDNC 命名上下文。该脚本使用以下命令:

cscript fixfsmo.vbs DC = DomainDnsZones,DC = contoso,DC = com

 

-------fixfsmo.vbs------------------
const ADS_NAME_INITTYPE_GC = 3
const ADS_NAME_TYPE_1779 = 1
const ADS_NAME_TYPE_CANONICAL = 2

 

set inArgs = WScript.Arguments

if (inArgs.Count = 1) then
    ' Assume the command line argument is the NDNC (in DN form) to use.
    NdncDN = inArgs(0)
Else
    Wscript.StdOut.Write "usage: cscript fixfsmo.vbs NdncDN"
End if

if (NdncDN <> "") then

    ' Convert the DN form of the NDNC into DNS dotted form.
    Set objTranslator = CreateObject("NameTranslate")
    objTranslator.Init ADS_NAME_INITTYPE_GC, ""
    objTranslator.Set ADS_NAME_TYPE_1779, NdncDN
    strDomainDNS = objTranslator.Get(ADS_NAME_TYPE_CANONICAL)
    strDomainDNS = Left(strDomainDNS, len(strDomainDNS)-1)
    
    Wscript.Echo "DNS name: " & strDomainDNS

    ' Find a domain controller that hosts this NDNC and that is online.
    set objRootDSE = GetObject("LDAP://" & strDomainDNS & "/RootDSE")
    strDnsHostName = objRootDSE.Get("dnsHostName")
    strDsServiceName = objRootDSE.Get("dsServiceName")
    Wscript.Echo "Using DC " & strDnsHostName

    ' Get the current infrastructure fsmo.
    strInfraDN = "CN=Infrastructure," & NdncDN
    set objInfra = GetObject("LDAP://" & strInfraDN)
    Wscript.Echo "infra fsmo is " & objInfra.fsmoroleowner

    ' If the current fsmo holder is deleted, set the fsmo holder to this domain controller.

    if (InStr(objInfra.fsmoroleowner, "\0ADEL:") > 0) then

        ' Set the fsmo holder to this domain controller.
        objInfra.Put "fSMORoleOwner",  strDsServiceName
        objInfra.SetInfo

        ' Read the fsmo holder back.
        set objInfra = GetObject("LDAP://" & strInfraDN)
        Wscript.Echo "infra fsmo changed to:" & objInfra.fsmoroleowner

    End if

End if

若要确定结构主机为分区,查询 fSMORoleOwner 属性,在问题中的命名上下文根目录下基础架构对象上。 例如对于查询 fSMORoleOwner 属性在 CN = 基础结构,DC = DomainDnsZones,DC = contoso,DC = com 命名上下文以确定结构主机的根目录在 DC = DomainDnsZones,DC = contoso,DC = com 分区。 同样,查询 fSMORoleOwner 属性在 CN = 基础结构,DC = ForestDnsZones,DC = contoso,DC = com 命名上下文以确定结构主机的根目录在 DC = ForestDnsZones,DC = contoso,DC = com 分区。

您可以使用 LDP 工具、 Active Directory 服务接口 (ADSI) 编辑工具和 ldifde 工具这样的工具来执行这些查询。例如对于下面的查询使用 Idifde 工具:

ldifde-f Infra_DomainDNSZones.ldf-d"CN = 基础结构,DC = DomainDnsZones,DC = contoso,DC = com"-l fSMORoleOwner

此查询返回的基础结构主机角色所有者在 DC = DomainDnsZones,DC = contoso,DC = com Infra_DomainDNSZones.ldf 文件的分区。

注意 您可以在不损害目录林的情况下多次运行 Adprep /rodcprep 命令。已完成在更早执行 rodcprep 命令的操作不重复。

如果试图在隔离的环境中运行 rodcprep 命令基础结构主服务器为每个域,并为每个应用程序目录分区必须成功执行该操作在环境中可用。