Supprimer manuellement les objets persistants sur les partenaires de réplication obsolètes
Cet article vous aide à supprimer manuellement les objets persistants après avoir ramené un contrôleur de domaine obsolète (DC) ou un serveur de catalogue global en ligne. Dans de nombreux cas, vous pouvez nettoyer les objets persistants à l’aide de la repadmin /removelingeringobjects
commande ou des outils tels que Lingering Object Liquidator. Toutefois, ces installations ne fonctionnent pas si vous avez abandonné des objets.
Numéro de base de connaissances d’origine : 314282
Lorsque vous ramenez un contrôleur de domaine ou un serveur de catalogue global en ligne une fois qu’il a été hors connexion depuis longtemps, l’un des problèmes suivants peut se produire :
- Les messages électroniques ne sont pas remis à un utilisateur dont l’objet utilisateur a été déplacé entre les domaines. Une fois que vous avez remis le contrôleur de domaine obsolète ou le serveur de catalogue global en ligne, les deux instances de l’objet utilisateur apparaissent dans le contenu du catalogue global. Les deux objets ont la même adresse e-mail. Par conséquent, les messages électroniques ne peuvent pas être remis.
- Un compte d’utilisateur qui n’existe plus apparaît toujours dans la liste d’adresses globale.
- Un groupe universel qui n’existe plus apparaît toujours dans le jeton d’accès d’un utilisateur.
La durée hors connexion est supérieure à la valeur du paramètre de durée de vie de la pierre tombstone
Un contrôleur de domaine ou un serveur de catalogue global qui a été hors connexion depuis plus longtemps que la valeur du paramètre de durée de vie tombstone (la valeur par défaut est 60 ou 180 jours) peut contenir des objets qui ont été supprimés sur d’autres contrôleurs de domaine ou serveurs de catalogue globaux. En outre, les pierres tombales pour ces objets n’existent plus. Lorsque vous ramenez le contrôleur de domaine obsolète en ligne, il ne peut pas être averti des suppressions d’objets. Si l’un des objets est modifié, ils sont réactivés dans le reste du domaine.
Pour les objets persistants répliqués dans des contextes d’affectation de noms en lecture/écriture, le comportement standard (cohérence de réplication libre) est que le contrôleur de domaine récepteur recrée les objets qui ne sont pas déjà présents dans l’arborescence d’informations de répertoire de base de données locale (DIT). Ces objets sont ensuite répliqués vers le contrôleur de domaine d’origine, recréant efficacement les objets supprimés. Si l’objet ne doit pas exister dans Active Directory (par exemple, si l’objet a été réintroduisé par un contrôleur de domaine obsolète), vous pouvez supprimer les objets avec des outils standard (tels que ADSIEdit ou le composant logiciel enfichable Utilisateurs et ordinateurs Active Directory).
Il est simple de supprimer des objets persistants pour les contextes d’affectation de noms en lecture/écriture. Cet article explique comment supprimer des objets persistants qui sont déjà apparus dans des contextes de nommage de catalogue global (en lecture seule).
Obtenir le nom unique et identifier le domaine
La meilleure façon d’identifier le domaine où se trouve un objet (et par conséquent le nom d’un contrôleur de domaine qui a une copie en lecture/écriture de l’objet) consiste à établir le nom unique de l’objet. Pour ce faire, recherchez le nom (ou une partie du nom) de la liste d’utilisateurs, de groupes ou de distribution dupliqués à l’aide de l’outil Ldp.exe :
Démarrez Ldp.exe.
Dans le menu Connexion , sélectionnez Se connecter.
Entrez le nom d’un serveur de catalogue global. Entrez 3268 en tant que port auquel se connecter. Cliquez sur OK.
Dans le menu Connexion , sélectionnez Lier. Si vos informations d’identification actuelles ne sont pas suffisantes pour interroger tout le contenu du catalogue global, entrez les informations d’identification valides. Cliquez sur OK.
Dans le menu Affichage , sélectionnez Arborescence. Entrez le nom unique de la racine de la forêt. Cliquez sur OK.
Cliquez avec le bouton droit sur la racine de la forêt dans la liste des arborescences, puis sélectionnez Rechercher.
Créez un filtre du formulaire suivant :
(attribute=value)
Remplacez l’attribut et la valeur par les données appropriées. Par exemple, pour créer un filtre pour retourner des résultats où l’attribut sAMAccountName a une valeur définie sur un compte d’utilisateur nommé testuser, entrez (sAMAccountName=testuser) dans la zone Filtre. Les attributs cn, userPrincipalName, sAMAccountName, name, mail et sn sont des candidats utiles pour rechercher un objet utilisateur. Pour les objets de groupe, utilisez les attributs cn, sAMAccountName ou name . Vous pouvez utiliser des astérisques (*) dans le champ valeur si nécessaire.
Pour plus d’informations sur la syntaxe de filtre LDAP (Lightweight Directory Access Protocol), consultez La syntaxe du filtre de recherche.
Sélectionnez Subtree comme étendue de recherche.
Cliquez sur Options. Dans la boîte de dialogue Options de recherche, accédez à la fin du contrôle Attributs .
Ajoutez objectGUID ; à la liste. Cliquez sur OK.
Sélectionnez Exécuter pour exécuter la requête.
Affichez les résultats. Vous devez identifier quels objets affichés doivent être supprimés du serveur de catalogue global. Une indication indiquant que vous avez trouvé un objet problématique est que l’objet n’existe pas sur une copie en lecture/écriture du contexte d’affectation de noms.
Réexécutez la requête et réexécutez-la si nécessaire.
Si vous avez identifié l’objet persistant, notez son nom unique et son objectGUID.
Après avoir obtenu le nom unique de l’objet, identifiez le domaine dans lequel il a été localisé en examinant la partie dc= du nom unique. Par exemple, le domaine de cn=FirstName LastName,cn=Users,dc=contoso,dc=com est contoso.com. Ensuite, recherchez un contrôleur de domaine pour le domaine (il peut également s’agir d’un serveur de catalogue global).
Exécutez la repadmin /showreps <dcname>
commande (où <dcname>
se trouve le nom du contrôleur de domaine que vous avez localisé). À partir de la sortie, notez les points suivants objectGuid
:
C:\>repadmin /showreps some-DC
Your-Site\some-DC
DSA Options : (none)
objectGuid : <GUID>
Supprimer des objets persistants si vous n’avez que quelques objets et serveurs de catalogue globaux
Si vous n’avez que quelques objets et serveurs de catalogue globaux, procédez comme suit pour supprimer les objets à l’aide de Ldp.exe :
Connectez-vous à chaque serveur de catalogue global qui contient une copie de l’objet persistant à l’aide des informations d’identification de l’administrateur d’entreprise.
Démarrez Ldp.exe et connectez-vous au port 389 sur le contrôleur de domaine local (laissez la zone Serveur vide).
Dans le menu Connexion , sélectionnez Lier. Laissez toutes les zones vides (vous êtes déjà connecté en tant qu’administrateur d’entreprise).
Dans le menu Parcourir , sélectionnez Modifier.
Laissez la zone Dn vide.
Dans la zone Attribut , entrez RemoveLingeringObject.
Entrez <GUID= comme valeur.
Ajoutez le GUID du contrôleur de domaine que vous avez obtenu précédemment à partir de la commande
repadmin /showreps <dcname>
.Note
Dans cet exemple,
<dcname>
il s’agit d’un contrôleur de domaine qui héberge le contexte d’affectation de noms accessible en écriture de l’objet persistant.Append > : <GUID=. N’omettez pas les espaces.
Ajoutez le GUID de l’objet persistant.
Ajouter >.
La valeur complète doit ressembler à : <GUID=GUID> : <GUID=GUID>
Sélectionnez l’opération Remplacer , puis sélectionnez Entrée sur l’interface. À présent, la commande apparaît dans la liste d’entrées.
Sélectionnez Exécuter pour exécuter la requête. Le côté droit de la fenêtre Ldp.exe contient le résultat de la requête. Elle doit ressembler à cet exemple :
***Call Modify... ldap_modify_s(ld, '(null)',[1] attrs); Modified "".
Supprimer des objets persistants si vous avez de nombreux objets et serveurs de catalogue globaux
Si vous avez de nombreux objets à supprimer et de nombreux serveurs de catalogue globaux, il peut être plus pratique d’utiliser les scripts suivants :
Collez le texte suivant dans un nouveau fichier nommé Walkservers.cmd dans un nouveau dossier :
for /f %%j in (server-list.txt) do walkobjects %%j
Collez le texte suivant dans un fichier nommé Walkobjects.cmd :
for /f "delims=@" %%i in (object-list.txt) do cscript //NoLogo MODIFYROOTDSE.VBS %1 "%%i" >>update-%1.log
Note
Il s’agit d’une seule ligne de commande. Les sauts de ligne sont insérés ici pour la lisibilité.
Collez le texte suivant dans un fichier nommé Modifyrootdse.vbs :
'******************************************************************** '* '* File: MODIFYROOTDSE.VBS '* Created: January 2002 '* Version: 1.0 '* '* Main Function: Writes Active Directory information to clean up '* objects as per: Q314282. '* Usage: Modifyrootdse.vbs <TargetServer> <GUID PAIR> '* Parameter are fed into the script using a pair of batch files. '* '* Copyright (C) 2002 Microsoft Corporation '* '******************************************************************** OPTION EXPLICIT ON ERROR RESUME NEXT Dim objDomain Dim ObjValue, strServerName, adsLdapPath Dim i 'Get the command-line arguments if Wscript.arguments.count <> 2 Then Print "Invalid Number of Parameters. Use with WalkServers.CMD and WalkObjects.CMD" WScript.quit End If strServerName = Wscript.arguments.item(0) ObjValue = Wscript.arguments.item(1) adsLdapPath = "LDAP://" & strServerName & "/RootDSE" Set objDomain = GetObject(adsLdapPath) If Err.Number <> 0 Then WScript.Echo "Error opening ROOTDSE. Error number is: " & Err.Number & ". Error description is: " & Err.Description & "." Set objDomain = Nothing WScript.quit End If objDomain.Put "RemoveLingeringObject", ObjValue objDomain.Setinfo If Err.Number = 0 Then WScript.Echo "Object " & ObjValue & " was removed." Else WScript.Echo "Object " & ObjValue & " could not be removed. Error number is: " & Err.Number & ". Error description is: " & Err.Description & "." End If WScript.Quit
Note
Si vous démarrez Modifyrootdse.vbs manuellement, veillez à placer tous les paramètres qui contiennent des espaces entre guillemets.
Créez une liste de tous les serveurs de catalogue globaux qui contiennent les objets persistants. Placez les noms de serveur dans un fichier Server-list.txt dans le même dossier. Utilisez les noms de domaine complets pour éviter les recherches de suffixes DNS.
Ajoutez les paires GUID obtenues précédemment dans cette procédure à un fichier Object-list.txt . Ajoutez une paire par ligne. Utilisez la syntaxe suivante :
<GUID = <DC GUID>> : <GUID = <object GUID>>
Ici, la première valeur est le GUID du contrôleur de domaine accessible en écriture utilisé pour confirmer que l’objet d’origine n’existe plus. La deuxième valeur est le GUID de l’objet persistant à supprimer.
Exécutez le fichier Walk-servers.cmd . Les scripts génèrent un fichier journal nommé Update-server-name.log pour chaque serveur de catalogue global répertorié dans le fichier Server-list.txt . Les fichiers journaux contiennent une ligne pour chaque objet à supprimer.
Note
Les erreurs dans les fichiers journaux n’indiquent pas nécessairement un problème, car les objets persistants peuvent ne pas exister sur tous les serveurs de catalogue globaux. Toutefois, les messages d’erreur de la forme « opération refusée » ou « erreur d’opération » indiquent un problème avec les GUID ou la syntaxe de valeur. Si ces erreurs se produisent, vérifiez les éléments suivants :
- Vérifiez que les GUID du contrôleur de domaine sont les GUID appropriés pour les contrôleurs de domaine qui contiennent une copie accessible en écriture du domaine qui contient l’objet.
- Assurez-vous que les GUID d’objet identifient les objets persistants dans les contextes de nommage du catalogue global (en lecture seule).
Message d’erreur lors de l’exécution de Walkservers.cmd pour modifier de nombreux objets persistants dans l’environnement
GUID de l’objet <:><GUID=GUID> n’a pas pu être supprimé. Numéro d’erreur : -2147016672. La description de l’erreur est la suivante : .
Cette erreur se produit, car le script s’exécute sur le GUID d’un contrôleur de domaine qui ne contient pas de partition accessible en écriture qui contient l’objet persistant. Utilisez l’outil Ldp.exe pour vérifier l’emplacement de l’objet persistant.
Exemple
Dans l’exemple suivant, l’objet persistant qui provoque la suppression du message d’erreur se trouve dans le corp.company.local
domaine. Toutefois, le <GUID=<GUID>>
fichier objects-list.txt est associé à un contrôleur de domaine dans le company.local
domaine qui n’a pas de partition accessible en écriture pour corp.company.local
.
ldap_search_s(ld, "DC=company,DC=local", 2, "(cn=User*)", attrList, 0, &msg)
Result <0>: (null)
Matched DNs:
Getting 4 entries:
>> Dn: CN=User\, Joe,OU=Exec,OU=Corporate Users,DC=corp,DC=company,DC=local
1> canonicalName: corp.company.local/Corporate Users/Exec/User, Joe;
1> cn: User, Joe;
1> description: CEO;
1> displayName: User, Joe;
1> distinguishedName: CN=User\, Joe,OU=Exec,OU=Corporate Users,DC=corp,DC=company,DC=local;
4> objectClass: top; person; organizationalPerson; user;
1> objectGUID: <GUID>;
1> name: User, Joe;
>> Dn: CN=User\, Joe,OU=Migration,DC=corp,DC=company,DC=local
1> canonicalName: corp.company.local/Migration/User, Joe;
1> cn: User, Joe;
1> description: Disabled Account;
1> displayName: User, Joe;
1> distinguishedName: CN=User\, Joe,OU=Migration,DC=corp,DC=company,DC=local;
4> objectClass: top; person; organizationalPerson; user;
1> objectGUID: <GUID>;
1> name: User, Joe;
Obtenez le GUID d’un serveur dans le corp.company.local
domaine en exécutant la commande suivante :
repadmin /showreps <dcname>
Dans cette commande, <dcname>
est un espace réservé pour le nom d’un contrôleur de domaine dans le corp.company.local
domaine. Modifiez le GUID dans le fichier Objects-list.txt pour qu’il corresponde au GUID du contrôleur de domaine dans le corp.company.local
domaine. Dans cet exemple, le fichier Objects-list.txt s’affiche comme suit :
<GUID=<GUID>> : <GUID=<GUID>>
Le premier <GUID>
est le GUID du contrôleur de domaine dans le corp.company.local
domaine. Le second <GUID>
est le GUID de l’objet persistant à partir de la recherche LDAP.
Lorsque vous exécutez Walk-servers.cmd, la commande se termine correctement sans l’erreur « -2147016672 ».
Si vous ne pouvez pas résoudre les erreurs dans les fichiers journaux à l’aide de ces méthodes, vous rencontrerez peut-être un problème différent. Pour obtenir de l’aide supplémentaire, contactez les services de support technique Microsoft.