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

Cet article résout un problème : la commande n’est pas terminée correctement, car le maître d’infrastructure pour un ou plusieurs Adprep /rodcprep NCS Active Directory n’est pas accessible.

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

Symptômes

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

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

Adprep a échoué à l’opération sur la partition DC=DomainDnsZones,DC=Contoso,DC=com Skipping to next partition.

Adprep n’a pas pu contacter un réplica pour 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 serveur : (null).

Adprep a échoué à l’opération sur la partition DC=ForestDnsZones,DC=Contoso,DC=com Skipping to next partition.

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

Cause

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

  • La partition ou les partitions référencés dans le message d’erreur n’existent plus.
  • Le maître d’infrastructure pour la ou les partitions référencé(s) a été rétrogradé de force ou est hors connexion.

Résolution

Pour résoudre ce problème si la partition n’existe plus, faites 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 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 ».

Informations supplémentaires

L’exemple de script suivant modifie l’attribut fSMORoleOwner sur l’objet infrastructure du NDNC (Non-Domain Naming Context) spécifié en un serveur actif ou contactable. Le NDNC de cet exemple est le contexte d’appellation NDNC DomainDnsZones,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 le maître d’infrastructure d’une partition, interrogez l’attribut fSMORoleOwner sur l’objet d’infrastructure sous la racine du contexte d’appellation en question. Par exemple, interrogez l’attribut fSMORoleOwner sur le CN=Infrastructure,DC=DomainDnsZones,DC=contoso,DC=com naming context root to determine the infrastructure master for the DC=DomainDnsZones,DC=contoso,DC=com partition. De même, interrogez l’attribut fSMORoleOwner sur l’attribut CN=Infrastructure,DC=ForestDnsZones,DC=contoso,DC=com naming context root to determine the infrastructure master for the D C=ForestDnsZones,DC=contoso,DC=com partition.

Vous pouvez utiliser des outils tels que l’outil LDP, l’outil ADSI (Active Directory Service Interfaces) Edit et l’outil ldifde pour 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 renvoie le propriétaire du rôle principal d’infrastructure pour la partition DC=DomainDnsZones,DC=contoso,DC=com au fichier Infra_DomainDNSZones.ldf.

Notes

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

Si vous essayez d’exécuter la commande dans un environnement isolé, le maître d’infrastructure pour chaque domaine et pour chaque partition d’annuaire d’applications doit être disponible dans l’environnement pour que l’opération rodcprep réussisse.