Erreur lors de l’exécution de la Adprep /rodcprep commande dans Windows Server 2008 : Adprep n’a pas pu contacter un réplica pour la partition DC=DomainDnsZones,DC=Contoso,DC=com

Cet article résout un problème lié à l’échec de la Adprep /rodcprep commande, car l’infrastructure master pour un ou plusieurs NDC Active Directory n’est pas accessible.

S’applique à : Windows Server 2012 R2
Numéro de la base de connaissances d’origine : 949257

Symptômes

Lorsque vous exécutez la Adprep /rodcprep commande sur Windows Server 2008, le message d’erreur suivant s’affiche :

Adprep n’a pas pu contacter un réplica pour la partition DC=DomainDnsZones,DC=Contoso,DC=com

Adprep n’a pas pu effectuer l’opération sur la partition DC=DomainDnsZones,DC=Contoso,DC=com Ignorer la partition suivante.

Adprep n’a pas pu contacter un réplica pour la partition DC=ForestDnsZones,DC=Contoso,DC=com

Adprep a rencontré une erreur LDAP. Code d’erreur : 0x0. Code d’erreur étendu du serveur : 0x0, Message d’erreur du serveur : (null).

Adprep a échoué l’opération sur la partition DC=ForestDnsZones,DC=Contoso,DC=com Ignorer la partition suivante.

Adprep s’est terminé avec des erreurs. Toutes les partitions ne sont pas mises à jour.

Cause

Ce problème se produit lorsque la Adprep /rodcprep commande tente de contacter l’infrastructure master pour chaque partition d’application dans la forêt. La commande l’exécute pour définir les autorisations requises pour Read-Only réplication du contrôleur de domaine (RODC). La Adprep /rodcprep commande échoue si l’une des conditions suivantes est remplie :

  • La partition ou les partitions référencées dans le message d’erreur n’existent plus.
  • L’infrastructure master pour la ou les partitions référencées a été rétrogradée de force ou est hors connexion.

Résolution

Pour résoudre ce problème si la partition n’existe plus, effectuez un nettoyage des métadonnées pour la partition orpheline à l’aide du paramètre « remove nc » de l’outil Dsmgmt. Pour plus d’informations, visitez le site web de Microsoft suivant :

gestion des partitions

Si la partition spécifiée existe, spécifiez un propriétaire de rôle d’infrastructure en ligne pour la partition. Vous pouvez le faire en modifiant manuellement l’attribut fSMORoleOwner sur l’objet, comme décrit dans la section « Plus d’informations ».

Plus d’informations

L’exemple de script suivant modifie l’attribut fSMORoleOwner sur l’objet d’infrastructure du NDNC (Non-Domain Naming Context) spécifié en serveur actif ou contactable. Le NDNC dans cet exemple est le contexte d’affectation de noms NDNC DomainDns,DC=contoso,DC=com . Le script utilise la commande suivante :

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

Pour déterminer l’infrastructure master pour une partition, interrogez l’attribut fSMORoleOwner sur l’objet d’infrastructure sous la racine du contexte d’affectation de noms en question. Par exemple, interrogez l’attribut fSMORoleOwner sur la racine du contexte d’affectation de noms CN=Infrastructure,DC=DomainDnsZones,DC=contoso,DC=com pour déterminer la master d’infrastructure pour la partition DC=DomainDnsZones,DC=contoso,DC=com. De même, interrogez l’attribut fSMORoleOwner sur la racine du contexte d’affectation de noms CN=Infrastructure,DC=ForestDnsZones,DC=contoso,DC=com afin de déterminer la master d’infrastructure pour la partition DC=ForestDnsZones,DC=contoso,DC=com.

Vous pouvez utiliser des outils tels que l’outil LDP, l’outil De modification des interfaces de service Active Directory (ADSI) et l’outil ldifde pour effectuer ces requêtes. Par exemple, la requête suivante utilise l’outil Idifde :

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

Cette requête retourne l’infrastructure master propriétaire du rôle pour la partition DC=DomainDnsZones,DC=contoso,DC=com au fichier Infra_DomainDNSZones.ldf.

Remarque

Vous pouvez exécuter la Adprep /rodcprep commande plusieurs fois sans endommager la forêt. Les opérations effectuées lors d’exécutions antérieures de la commande rodcprep ne sont pas répétées.

Si vous essayez d’exécuter la rodcprep commande dans un environnement isolé, l’infrastructure master pour chaque domaine et pour chaque partition de répertoire d’application doit être disponible dans l’environnement pour que l’opération réussisse.