Fehler beim Ausführen des Adprep /rodcprep Befehls in Windows Server 2008: Adprep konnte kein Replikat für die Partition DC=DomainDnsZones,DC=Contoso,DC=com kontaktieren

In diesem Artikel wird ein Problem behoben, bei dem der Adprep /rodcprep Befehl nicht erfolgreich abgeschlossen wurde, da die Infrastruktur master für einen oder mehrere Active Directory-NDNCs nicht erreichbar ist.

Gilt für: Windows Server 2012 R2
Ursprüngliche KB-Nummer: 949257

Symptome

Wenn Sie den Adprep /rodcprep Befehl unter Windows Server 2008 ausführen, wird die folgende Fehlermeldung angezeigt:

Adprep konnte kein Replikat für die Partition DC=DomainDnsZones,DC=Contoso,DC=com kontaktieren.

Adprep hat den Vorgang auf partition DC=DomainDnsZones,DC=Contoso,DC=com Überspringen zur nächsten Partition fehlgeschlagen.

Adprep konnte kein Replikat für die Partition DC=ForestDnsZones,DC=Contoso,DC=com kontaktieren.

Bei Adprep ist ein LDAP-Fehler aufgetreten. Fehlercode: 0x0. Erweiterter Serverfehlercode: 0x0, Serverfehlermeldung: (NULL).

Adprep hat den Vorgang auf partition DC=ForestDnsZones,DC=Contoso,DC=com Überspringen zur nächsten Partition fehlgeschlagen.

Adprep wurde mit Fehlern abgeschlossen. Nicht alle Partitionen werden aktualisiert.

Ursache

Dieses Problem tritt auf, wenn der Adprep /rodcprep Befehl versucht, die Infrastruktur master für jede Anwendungspartition in der Gesamtstruktur zu kontaktieren. Der Befehl legt die Berechtigungen fest, die für Read-Only Domänencontrollerreplikation (RODC) erforderlich sind. Der Adprep /rodcprep Befehl schlägt fehl, wenn eine der folgenden Bedingungen zutrifft:

  • Die Partition oder die Partitionen, auf die in der Fehlermeldung verwiesen wird, sind nicht mehr vorhanden.
  • Die Infrastruktur master für die Partitionen, auf die verwiesen wird, wurde erzwungen oder ist offline.

Lösung

Um dieses Problem zu beheben, wenn die Partition nicht mehr vorhanden ist, führen Sie eine Metadatenbereinigung für die verwaiste Partition durch, indem Sie den Parameter "remove nc" des Dsmgmt-Tools verwenden. Weitere Informationen hierzu finden Sie auf folgender Website von Microsoft:

Partitionsverwaltung

Wenn die angegebene Partition vorhanden ist, geben Sie einen Besitzer der Infrastrukturrolle an, der für die Partition online ist. Sie können dies tun, indem Sie das fSMORoleOwner-Attribut für das Objekt manuell ändern, wie im Abschnitt "Weitere Informationen" beschrieben.

Weitere Informationen

Im folgenden Skriptbeispiel wird das fSMORoleOwner-Attribut für das Infrastrukturobjekt des angegebenen Non-Domain Naming Context (NDNC) in einen aktiven oder kontaktierbaren Server geändert. Der NDNC in diesem Beispiel ist der DomainDnsZones,DC=contoso,DC=com NDNC-Benennungskontext . Das Skript verwendet den folgenden Befehl:

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

Um die Infrastruktur master für eine Partition zu bestimmen, fragen Sie das fSMORoleOwner-Attribut für das Infrastrukturobjekt unter dem betreffenden Namenskontextstamm ab. Fragen Sie beispielsweise das fSMORoleOwner-Attribut für die CN=Infrastructure,DC=DomainDnsZones,DC=contoso,DC=com naming context root ab, um die Infrastruktur master für die Partition DC=DomainDnsZones,DC=contoso,DC=com zu bestimmen. Auf ähnliche Weise fragen Sie das fSMORoleOwner-Attribut für die Partition "CN=Infrastructure,DC=ForestDnsZones,DC=contoso,DC=com naming context root" ab, um die Infrastruktur master für die Partition DC=ForestDnsZones,DC=contoso,DC=com zu bestimmen.

Sie können Tools wie das LDP-Tool, das AdsI-Bearbeitungstool (Active Directory Service Interfaces) und das ldifde-Tool verwenden, um diese Abfragen durchzuführen. Die folgende Abfrage verwendet z. B. das Idifde-Tool:

ldifde -f Infra_DomainDNSZones.ldf -d "CN=Infrastructure,DC=DomainDnsZones,DC=contoso,DC=com" -l fSMORoleOwner

Diese Abfrage gibt die Infrastruktur master Rollenbesitzer für die Partition DC=DomainDnsZones,DC=contoso,DC=com in die Datei Infra_DomainDNSZones.ldf zurück.

Hinweis

Sie können den Adprep /rodcprep Befehl mehrmals ausführen, ohne die Gesamtstruktur zu beeinträchtigen. Vorgänge, die in früheren Ausführungen des rodcprep-Befehls abgeschlossen wurden, werden nicht wiederholt.

Wenn Sie versuchen, den rodcprep Befehl in einer isolierten Umgebung auszuführen, muss die Infrastruktur master für jede Domäne und für jede Anwendungsverzeichnispartition innerhalb der Umgebung verfügbar sein, damit der Vorgang erfolgreich ausgeführt werden kann.