Manuelles Entfernen des Anhaltens von Objekten auf veralteten Replikationspartnern
Dieser Artikel hilft, objekte manuell zu entfernen, nachdem Sie einen veralteten Domänencontroller (DC) oder einen globalen Katalogserver wieder online übertragen haben. In vielen Fällen können Sie objekte mithilfe des repadmin /removelingeringobjects
Befehls oder der Tools wie Lingering Object Liquidator bereinigen. Diese Einrichtungen funktionieren jedoch nicht, wenn Sie Objekte verlassen haben.
Wenn Sie einen Domänencontroller oder einen globalen Katalogserver nach langer Offlinezeit wieder online schalten, kann es zu einem der folgenden Probleme kommen:
- E-Mail-Nachrichten werden nicht an einen Benutzer übermittelt, dessen Benutzerobjekt zwischen Domänen verschoben wurde. Nachdem Sie den veralteten Domänencontroller oder den globalen Katalogserver wieder online übertragen haben, werden beide Instanzen des Benutzerobjekts im globalen Kataloginhalt angezeigt. Beide Objekte haben dieselbe E-Mail-Adresse, sodass E-Mail-Nachrichten nicht zugestellt werden können.
- Ein Benutzerkonto, das nicht mehr vorhanden ist, wird weiterhin in der globalen Adressliste angezeigt.
- Eine universelle Gruppe, die nicht mehr vorhanden ist, wird weiterhin im Zugriffstoken eines Benutzers angezeigt.
Die Offlinedauer ist länger als der Wert der Einstellung "Tombstone Lifetime"
Ein Domänencontroller oder globaler Katalogserver, der länger offline war als der Wert der Einstellung für die Tombstone-Lebensdauer (der Standardwert ist 60 oder 180 Tage), kann Objekte enthalten, die auf anderen Domänencontrollern oder globalen Katalogservern gelöscht wurden. Darüber hinaus sind Grabsteine für diese Objekte möglicherweise nicht mehr vorhanden. Wenn Sie den veralteten Domänencontroller wieder online schalten, kann er nicht über die Objektlöschungen benachrichtigt werden. Wenn eines der Objekte geändert wird, werden sie im Rest der Domäne reaktiviert.
Für das Beibehalten von Objekten, die in Schreib-/Schreibbenennungskontexten repliziert werden, besteht das Standardverhalten (lose Replikationskonsistenz) darin, dass der empfangende Domänencontroller die Objekte neu erstellt, die noch nicht im lokalen Datenbankverzeichnisinformationsbaum (DIT) vorhanden sind. Diese Objekte werden dann wieder auf den ursprünglichen Domänencontroller repliziert, wodurch die gelöschten Objekte effektiv neu erstellt werden. Wenn das Objekt in Active Directory nicht vorhanden sein sollte (z. B. wenn das Objekt von einem veralteten Domänencontroller erneut eingeführt wurde), können Sie die Objekte mit Standardtools (z. B. ADSIEdit oder dem Active Directory-Benutzer und -Computer Snap-In) löschen.
Es ist einfach, das Anhalten von Objekten für Namenskontexte mit Lese-/Schreibzugriff zu entfernen. In diesem Artikel wird beschrieben, wie Sie das Anhalten von Objekten entfernen, die bereits im globalen Katalog (schreibgeschützt) namenskontexten enthalten sind.
Abrufen des distinguishierten Namens und Identifizieren der Domäne
Die beste Möglichkeit, um zu identifizieren, in welcher Domäne sich ein Objekt befindet (und daher der Name eines Domänencontrollers, der über eine Lese-/Schreibkopie des Objekts verfügt) besteht darin, den distinguishierten Namen des Objekts festzulegen. Dazu können Sie mithilfe des tools Ldp.exe nach dem Namen (oder einem Teil des Namens) des doppelten Benutzers, der Gruppe oder der Verteilerliste suchen:
Starten Sie Ldp.exe.
Wählen Sie im Menü "Verbindung" die Option "Verbinden" aus.
Geben Sie den Namen eines globalen Katalogservers ein. Geben Sie 3268 als Port ein, mit dem eine Verbindung hergestellt werden soll. Klicken Sie auf OK.
Wählen Sie im Menü "Verbindung" die Option "Binden" aus. Wenn Ihre aktuellen Anmeldeinformationen nicht ausreichen, um alle globalen Kataloginhalte abzufragen, geben Sie gültige Anmeldeinformationen ein. Klicken Sie auf OK.
Wählen Sie im Menü "Ansicht" die Option "Struktur" aus. Geben Sie den distinguished Name des Gesamtstrukturstamms ein. Klicken Sie auf OK.
Klicken Sie mit der rechten Maustaste auf den Gesamtstrukturstamm in der Strukturliste, und wählen Sie dann "Suchen" aus.
Erstellen Sie einen Filter des folgenden Formulars:
(attribut=value)
Ersetzen Sie Attribut und Wert durch die entsprechenden Daten. Wenn Sie beispielsweise einen Filter erstellen möchten, um Ergebnisse zurückzugeben, bei denen das sAMAccountName-Attribut einen Wert auf ein Benutzerkonto mit dem Namen "testuser" festgelegt hat, geben Sie (sAMAccountName=testuser) in das Feld "Filter " ein. Die Attribute "cn", "userPrincipalName", "sAMAccountName", "name", "mail" und "sn " sind hilfreiche Kandidaten zum Suchen eines Benutzerobjekts. Verwenden Sie für Gruppenobjekte die Attribute "cn", "sAMAccountName" oder "name ". Sie können sternchen (*) bei Bedarf im Wertfeld verwenden.
Weitere Informationen zur LDAP-Filtersyntax (Lightweight Directory Access Protocol) finden Sie unter Search Filter Syntax.
Wählen Sie "Unterstruktur " als Suchbereich aus.
Klicken Sie auf Optionen. Wechseln Sie im Dialogfeld "Suchoptionen " zum Ende des Attributes-Steuerelements .
Append objectGUID; to the list. Klicken Sie auf OK.
Klicken Sie auf Ausführen, um die Abfrage auszuführen.
Zeigen Sie die Ergebnisse an. Sie müssen ermitteln, welche der angezeigten Objekte vom globalen Katalogserver entfernt werden sollen. Ein Hinweis darauf, dass Sie ein problematisches Objekt gefunden haben, besteht darin, dass das Objekt nicht in einer Lese-/Schreibkopie des Namenskontexts vorhanden ist.
Formulieren Sie die Abfrage neu, und führen Sie sie bei Bedarf erneut aus.
Wenn Sie das lingernde Objekt identifiziert haben, notieren Sie sich den unterschiedenen Namen und objectGUID.
Nachdem Sie den distinguishierten Namen des Objekts erhalten haben, identifizieren Sie die Domäne, in der es sich befindet, indem Sie den Dc= -Teil des distinguished-Namens betrachten. Beispielsweise ist die Domäne von cn=FirstName LastName,cn=Users,dc=contoso,dc=com contoso.com. Suchen Sie als Nächstes einen Domänencontroller für die Domäne (es kann sich auch um einen globalen Katalogserver handeln).
Führen Sie den repadmin /showreps <dcname>
Befehl aus (dabei <dcname>
handelt es sich um den Namen des Domänencontrollers, den Sie sich befinden). Notieren Sie sich aus der Ausgabe die Domänencontroller objectGuid
:
C:\>repadmin /showreps some-DC
Your-Site\some-DC
DSA Options : (none)
objectGuid : <GUID>
Löschen sie, wenn Nur wenige Objekte und globale Katalogserver vorhanden sind.
Wenn Nur wenige Objekte und globale Katalogserver vorhanden sind, führen Sie die folgenden Schritte aus, um die Objekte mithilfe von Ldp.exe zu löschen:
Melden Sie sich bei jedem globalen Katalogserver an, der eine Kopie des beibehaltenden Objekts enthält, indem Sie Die Anmeldeinformationen des Unternehmensadministrators verwenden.
Starten Sie Ldp.exe, und stellen Sie eine Verbindung mit Port 389 auf dem lokalen Domänencontroller her (lassen Sie das Feld "Server" leer).
Wählen Sie im Menü "Verbindung" die Option "Binden" aus. Lassen Sie alle Felder leer (Sie sind bereits als Unternehmensadministrator angemeldet).
Wählen Sie im Menü "Durchsuchen" die Option "Ändern" aus.
Lassen Sie das Feld "Dn " leer.
Geben Sie im Feld "Attribut" "RemoveLingeringObject" ein.
Geben Sie <GUID= als Wert ein.
Fügen Sie die GUID des Domänencontrollers an, den Sie zuvor aus dem Befehl
repadmin /showreps <dcname>
abgerufen haben.Notiz
In diesem Beispiel handelt es sich um einen Domänencontroller,
<dcname>
der den schreibbaren Namenskontext des lingernden Objekts hostet.Append > : <GUID=. Lassen Sie die Leerzeichen nicht weg.
Fügen Sie die GUID des lingering-Objekts an.
Append >.
Der vollständige Wert sollte wie folgt aussehen: <GUID=GUID> : <GUID=GUID>
Wählen Sie den Ersetzungsvorgang und dann die EINGABETASTE auf der Benutzeroberfläche aus. Nun wird der Befehl in der Eintragsliste angezeigt.
Wählen Sie "Ausführen" aus, um die Anforderung auszuführen. Die rechte Seite des Ldp.exe Fensters enthält das Anforderungsergebnis. Die Seite sollte ähnlich wie dieses Beispiel aussehen:
***Call Modify... ldap_modify_s(ld, '(null)',[1] attrs); Modified "".
Löschen des Speicherns von Objekten, wenn viele Objekte und globale Katalogserver vorhanden sind
Wenn Sie viele Objekte zum Löschen und viele globale Katalogserver haben, ist es möglicherweise praktischer, die folgenden Skripts zu verwenden:
Fügen Sie den folgenden Text in eine neue Datei namens Walkservers.cmd in einen neuen Ordner ein:
for /f %%j in (server-list.txt) do walkobjects %%j
Fügen Sie den folgenden Text in eine Datei mit dem Namen Walkobjects.cmd ein:
for /f "delims=@" %%i in (object-list.txt) do cscript //NoLogo MODIFYROOTDSE.VBS %1 "%%i" >>update-%1.log
Notiz
Dies ist eine einzelne Befehlszeile. Hier werden Zeilenumbrüche zur Lesbarkeit eingefügt.
Fügen Sie den folgenden Text in eine Datei namens Modifyrootdse.vbs ein:
'******************************************************************** '* '* 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
Notiz
Wenn Sie Modifyrootdse.vbs manuell starten , müssen Sie alle Parameter einschließen, die Leerzeichen in Anführungszeichen enthalten.
Erstellen Sie eine Liste aller globalen Katalogserver, die die lingernden Objekte enthalten. Platzieren Sie die Servernamen in einer Server-list.txt Datei im selben Ordner. Verwenden Sie die vollqualifizierten Domänennamen, um DNS-Suffixsuchen zu vermeiden.
Fügen Sie die GUID-Paare hinzu, die Sie zuvor in diesem Verfahren erhalten haben, zu einer Object-list.txt Datei. Fügen Sie ein Paar pro Zeile hinzu. Verwenden Sie die folgende Syntax:
<GUID = <DC GUID>> : <GUID = <object GUID>>
Hier ist der erste Wert die GUID des schreibbaren Domänencontrollers, der verwendet wird, um zu bestätigen, dass das ursprüngliche Objekt nicht mehr vorhanden ist. Der zweite Wert ist die GUID des zu entfernenden Objekts.
Führen Sie die Walk-servers.cmd Datei aus. Die Skripts generieren eine Protokolldatei namens Update-server-name.log für jeden globalen Katalogserver, der in der datei Server-list.txt aufgeführt ist. Die Protokolldateien enthalten eine Zeile für jedes Objekt, das gelöscht werden soll.
Notiz
Fehler in den Protokolldateien deuten nicht unbedingt auf ein Problem hin, da die inaktiven Objekte möglicherweise nicht auf allen globalen Katalogservern vorhanden sind. Fehlermeldungen des Formulars "Vorgang verweigert" oder "Vorgangsfehler" deuten jedoch auf ein Problem mit den GUIDs oder der Wertsyntax hin. Wenn diese Fehler auftreten, überprüfen Sie die folgenden Elemente:
- Stellen Sie sicher, dass die Domänencontroller-GUIDs die richtigen GUIDs für Domänencontroller sind, die eine schreibbare Kopie der Domäne enthalten, die das Objekt enthält.
- Stellen Sie sicher, dass die Objekt-GUIDs das Anhalten von Objekten im globalen Katalog (schreibgeschützt) mit Benennungskontexten identifizieren.
Fehlermeldung beim Ausführen von Walkservers.cmd, um viele lingernde Objekte in der Umgebung zu ändern
Objekt-GUID <=GUID> : <GUID=GUID> konnte nicht entfernt werden. Fehlernummer: -2147016672. Fehlerbeschreibung: .
Dieser Fehler tritt auf, da das Skript für die GUID eines Domänencontrollers ausgeführt wird, die keine schreibbare Partition enthält, die das lingerende Objekt enthält. Verwenden Sie das tool Ldp.exe , um die Position des verweilenden Objekts zu überprüfen.
Beispiel
Im folgenden Beispiel befindet sich das beibehaltende Objekt, das bewirkt, dass die Fehlermeldung entfernt wird, in der corp.company.local
Domäne. Der <GUID=<GUID>>
aus der datei objects-list.txt wird jedoch einem Domänencontroller in der Domäne zugeordnet, für den company.local
keine schreibbare Partition vorhanden corp.company.local
ist.
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;
Rufen Sie die GUID eines Servers in der corp.company.local
Domäne ab, indem Sie den folgenden Befehl ausführen:
repadmin /showreps <dcname>
In diesem Befehl <dcname>
ist ein Platzhalter für den Namen eines Domänencontrollers in der corp.company.local
Domäne. Ändern Sie die GUID in der Objects-list.txt-Datei so, dass sie der GUID des Domänencontrollers in der corp.company.local
Domäne entspricht. In diesem Beispiel wird die Objects-list.txt Datei wie folgt angezeigt:
<GUID=<GUID>> : <GUID=<GUID>>
Die erste <GUID>
ist die GUID des Domänencontrollers in der corp.company.local
Domäne. Die zweite <GUID>
ist die GUID des lingering-Objekts aus der LDAP-Suche.
Wenn Sie Walk-servers.cmd ausführen, wird der Befehl jetzt ohne den Fehler "-2147016672" erfolgreich abgeschlossen.
Wenn Sie die Fehler in den Protokolldateien nicht mithilfe dieser Methoden beheben können, tritt möglicherweise ein anderes Problem auf. Wenden Sie sich an den Microsoft-Produktsupport, um weitere Unterstützung zu erhalten.