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 que la Adprep /rodcprep
commande n’est pas terminée correctement, car le maître d’infrastructure pour un ou plusieurs NDNCs Active Directory n’est pas accessible.
Numéro de base de connaissances d’origine : 949257
Symptômes
Lorsque vous exécutez la Adprep /rodcprep
commande sur Windows Server 2008, vous recevez le message d’erreur suivant :
Adprep n’a pas pu contacter un réplica pour la 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 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).
Échec de l’opération adprep sur la partition DC=ForestDnsZones,DC=Contoso,DC=com Skipping to next partition.
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 le maître d’infrastructure pour chaque partition d’application dans la forêt. La commande lui permet de définir les autorisations requises pour la réplication rodc (Read-Only Domain Controller). 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.
- Le maître d’infrastructure pour la partition ou les partitions référencées a été rétrogradé avec force ou 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, consultez le site web Microsoft suivant :
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 contexte d’affectation de noms de domaine (NDNC) spécifié en un serveur actif ou contactable. Le NDNC dans cet exemple est le contexte d’affectation de noms DomainDnsZones,DC=contoso,DC=com NDNC . 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 de nommage en question. Par exemple, interrogez l’attribut fSMORoleOwner sur l’attribut CN=Infrastructure,DC=DomainDnsZones,DC=contoso,DC=com pour déterminer le maître d’infrastructure pour 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 pour déterminer le maître d’infrastructure pour la partition DC=ForestDnsZones,DC=contoso,DC=com .
Vous pouvez utiliser des outils tels que l’outil LDP, l’outil d’édition ADSI (Active Directory Service Interfaces) 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 le propriétaire du rôle principal d’infrastructure pour la partition DC=DomainDnsZones,DC=contoso,DC=com dans le fichier Infra_DomainDNSZones.ldf.
Note
Vous pouvez exécuter la Adprep /rodcprep
commande plusieurs fois sans nuire à la forêt. Les opérations effectuées dans les 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é, le maître d’infrastructure 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.