Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Questo articolo consente di rimuovere manualmente gli oggetti persistenti dopo aver portato online un controller di dominio obsoleto o un server di catalogo globale. In molti casi, è possibile pulire gli oggetti persistenti usando il repadmin /removelingeringobjects
comando o gli strumenti come Lingering Object Liquidator. Tuttavia, queste strutture non funzionano se hai abbandonato oggetti.
Numero KB originale: 314282
Quando si riporta online un controller di dominio o un server di catalogo globale dopo che è stato offline per molto tempo, potrebbe verificarsi uno dei problemi seguenti:
- I messaggi di posta elettronica non vengono recapitati a un utente il cui oggetto utente è stato spostato tra domini. Dopo aver portato online il controller di dominio obsoleto o il server di catalogo globale, entrambe le istanze dell'oggetto utente vengono visualizzate nel contenuto del catalogo globale. Entrambi gli oggetti hanno lo stesso indirizzo di posta elettronica, quindi i messaggi di posta elettronica non possono essere recapitati.
- Un account utente che non esiste più viene ancora visualizzato nell'elenco indirizzi globale.
- Un gruppo universale che non esiste più viene ancora visualizzato nel token di accesso di un utente.
La durata offline è più lunga del valore dell'impostazione della durata della rimozione definitiva
Un controller di dominio o un server di catalogo globale che è stato offline per più tempo rispetto al valore dell'impostazione di durata della rimozione definitiva (il valore predefinito è 60 o 180 giorni) potrebbe contenere oggetti eliminati in altri controller di dominio o server di catalogo globali. Inoltre, le pietre tombe per questi oggetti potrebbero non esistere più. Quando si riporta online il controller di dominio obsoleto, non è possibile ricevere una notifica delle eliminazioni dell'oggetto. Se uno degli oggetti viene modificato, viene riattivato nel resto del dominio.
Per gli oggetti persistenti replicati in contesti di denominazione di lettura/scrittura, il comportamento standard (Coerenza replica debole) è che il controller di dominio ricevente ricrea gli oggetti che non sono già presenti nell'albero delle informazioni sulla directory del database locale (DIT). Questi oggetti vengono quindi replicati nuovamente nel controller di dominio di origine, ricreando in modo efficace gli oggetti eliminati. Se l'oggetto non deve esistere in Active Directory(ad esempio, se l'oggetto è stato reintrodotto da un controller di dominio obsoleto), è possibile eliminare gli oggetti con strumenti standard (ad esempio ADSIEdit o lo snap-in Utenti e computer di Active Directory).
È semplice rimuovere oggetti persistenti per i contesti di denominazione di lettura/scrittura. Questo articolo descrive come rimuovere gli oggetti persistenti che sono già apparsi nei contesti di denominazione del catalogo globale (di sola lettura).
Ottenere il nome distinto e identificare il dominio
Il modo migliore per identificare in quale dominio si trova un oggetto (e quindi il nome di un controller di dominio con una copia di lettura/scrittura dell'oggetto) consiste nel stabilire il nome distinto dell'oggetto. A tale scopo, cercare il nome (o parte del nome) dell'utente duplicato, del gruppo o della lista di distribuzione usando lo strumento di Ldp.exe :
Avviare Ldp.exe.
Scegliere Connetti dal menu Connessione.
Immettere il nome di un server di catalogo globale. Immettere 3268 come porta a cui connettersi. Seleziona OK.
Scegliere Associa dal menu Connessione. Se le credenziali correnti non sono sufficienti per eseguire query su tutto il contenuto del catalogo globale, immettere credenziali valide. Seleziona OK.
Scegliere Albero dal menu Visualizza. Immettere il nome distinto della radice della foresta. Seleziona OK.
Fare clic con il pulsante destro del mouse sulla radice della foresta nell'elenco ad albero e quindi scegliere Cerca.
Creare un filtro del formato seguente:
(attribute=value)
Sostituire attributo e valore con i dati appropriati. Ad esempio, per creare un filtro per restituire i risultati in cui l'attributo sAMAccountName ha un valore impostato su un account utente denominato testuser, immettere (sAMAccountName=testuser) nella casella Filtro . Gli attributi cn, userPrincipalName, sAMAccountName, name, mail e sn sono candidati utili per trovare un oggetto utente. Per gli oggetti gruppo, usare gli attributi cn, sAMAccountName o name . Se necessario, è possibile usare gli asterischi (*) nel campo valore .
Per altre informazioni sulla sintassi del filtro LDAP (Lightweight Directory Access Protocol), vedere sintassi del filtro di ricerca.
Selezionare Sottoalbero come ambito di ricerca.
Selezionare Opzioni. Nella finestra di dialogo Opzioni di ricerca passare alla fine del controllo Attributi.
Accoda objectGUID; all'elenco. Seleziona OK.
Selezionare Esegui per eseguire la query.
Visualizzare i risultati. È necessario identificare quale degli oggetti visualizzati deve essere rimosso dal server di catalogo globale. Un'indicazione che è stato rilevato un oggetto problematico è che l'oggetto non esiste in una copia di lettura/scrittura del contesto di denominazione.
Riformulare la query ed eseguirla di nuovo, se necessario.
Se è stato identificato l'oggetto persistente, annotare il nome distinto e objectGUID.
Dopo aver ottenuto il nome distinto dell'oggetto, identificare il dominio in cui si trovava esaminando la parte dc= del nome distinto. Ad esempio, il dominio di cn=FirstName LastName,cn=Users,dc=contoso,dc=com è contoso.com. Individuare quindi un controller di dominio per il dominio (può anche essere un server di catalogo globale).
Eseguire il repadmin /showreps <dcname>
comando (dove <dcname>
è il nome del controller di dominio individuato). Dall'output prendere nota del controller di dominio:objectGuid
C:\>repadmin /showreps some-DC
Your-Site\some-DC
DSA Options : (none)
objectGuid : <GUID>
Eliminare oggetti persistenti se sono presenti solo alcuni oggetti e server di catalogo globali
Se sono presenti solo alcuni oggetti e server di catalogo globali, seguire questa procedura per eliminare gli oggetti usando Ldp.exe:
Accedere a ogni server di catalogo globale che contiene una copia dell'oggetto persistente usando le credenziali di amministratore dell'organizzazione.
Avviare Ldp.exe e connettersi alla porta 389 nel controller di dominio locale (lasciare vuota la casella Server ).
Scegliere Associa dal menu Connessione. Lasciare vuote tutte le caselle (l'accesso è già stato eseguito come amministratore dell'organizzazione).
Scegliere Modifica dal menu Sfoglia.
Lasciare vuota la casella Dn .
Nella casella Attributo immettere RemoveLingeringObject.
Immettere <GUID= come valore.
Aggiungere il GUID del controller di dominio ottenuto in precedenza dal comando
repadmin /showreps <dcname>
.Note
In questo esempio,
<dcname>
è un controller di dominio che ospita il contesto di denominazione scrivibile dell'oggetto persistente.Append > : <GUID=. Non omettere gli spazi.
Aggiungere il GUID dell'oggetto persistente.
Accoda >.
Il valore completo dovrebbe essere simile a: <GUID=GUID> : <GUID=GUID>
Selezionare l'operazione Sostituisci e quindi immettere nell'interfaccia. Il comando viene visualizzato nell'elenco voci.
Selezionare Esegui per eseguire la richiesta. Il lato destro della finestra di Ldp.exe contiene il risultato della richiesta. Dovrebbe essere simile all'esempio seguente:
***Call Modify... ldap_modify_s(ld, '(null)',[1] attrs); Modified "".
Eliminare oggetti persistenti se sono presenti molti oggetti e server di catalogo globali
Se sono presenti molti oggetti da eliminare e molti server di catalogo globali, potrebbe essere più utile usare gli script seguenti:
Incollare il testo seguente in un nuovo file denominato Walkservers.cmd in una nuova cartella:
for /f %%j in (server-list.txt) do walkobjects %%j
Incollare il testo seguente in un file denominato Walkobjects.cmd:
for /f "delims=@" %%i in (object-list.txt) do cscript //NoLogo MODIFYROOTDSE.VBS %1 "%%i" >>update-%1.log
Note
Si tratta di una singola riga di comando. Le interruzioni di riga vengono inserite qui per migliorare la leggibilità.
Incollare il testo seguente in un file denominato 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
Se si avvia Modifyrootdse.vbs manualmente, assicurarsi di racchiudere tutti i parametri che contengono spazi tra virgolette.
Creare un elenco di tutti i server di catalogo globali che contengono gli oggetti persistenti. Inserire i nomi dei server in un file Server-list.txt nella stessa cartella. Usare i nomi di dominio completi per evitare ricerche suffissi DNS.
Aggiungere le coppie GUID ottenute in precedenza in questa procedura a un file Object-list.txt . Aggiungere una coppia per riga. Usare la sintassi seguente:
<GUID = <DC GUID>> : <GUID = <object GUID>>
In questo caso, il primo valore è il GUID del controller di dominio scrivibile usato per verificare che l'oggetto originale non esista più. Il secondo valore è il GUID dell'oggetto persistente da rimuovere.
Eseguire il file Walk-servers.cmd . Gli script generano un file di log denominato Update-server-name.log per ogni server di catalogo globale elencato nel file Server-list.txt . I file di log contengono una riga per ogni oggetto da eliminare.
Note
Gli errori nei file di log non indicano necessariamente un problema perché gli oggetti persistenti potrebbero non esistere in tutti i server di catalogo globali. Tuttavia, i messaggi di errore del formato "operazione rifiutata" o "errore di operazione" indicano un problema con i GUID o la sintassi del valore. Se si verificano questi errori, verificare gli elementi seguenti:
- Assicurarsi che i GUID del controller di dominio siano i GUID corretti per i controller di dominio che contengono una copia scrivibile del dominio che contiene l'oggetto .
- Assicurarsi che i GUID dell'oggetto identifichino gli oggetti persistenti nei contesti di denominazione del catalogo globale (di sola lettura).
Messaggio di errore durante l'esecuzione di Walkservers.cmd per modificare molti oggetti persistente nell'ambiente
GUID=GUID dell'oggetto <: <GUID=GUID> non è> stato possibile rimuovere. Il numero di errore è: -2147016672. La descrizione dell'errore è: .
Questo errore si verifica perché lo script viene eseguito sul GUID di un controller di dominio che non contiene una partizione scrivibile che contiene l'oggetto persistente. Utilizzare lo strumento Ldp.exe per verificare la posizione dell'oggetto persistente.
Esempio
Nell'esempio seguente l'oggetto persistente che causa la rimozione del corp.company.local
messaggio di errore si trova nel dominio. Tuttavia, dal <GUID=<GUID>>
file di objects-list.txt è associato a un controller di dominio nel company.local
dominio che non dispone di una partizione scrivibile per 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;
Ottenere il GUID di un server nel corp.company.local
dominio eseguendo il comando seguente:
repadmin /showreps <dcname>
In questo comando è <dcname>
un segnaposto per il nome di un controller di dominio nel corp.company.local
dominio. Modificare il GUID nel file Objects-list.txt in modo che corrisponda al GUID del controller di dominio nel corp.company.local
dominio. In questo esempio il file Objects-list.txt verrà visualizzato come segue:
<GUID=<GUID>> : <GUID=<GUID>>
Il primo <GUID>
è il GUID del controller di dominio nel corp.company.local
dominio. Il secondo <GUID>
è il GUID dell'oggetto persistente dalla ricerca LDAP.
Quando si esegue Walk-servers.cmd, il comando viene completato correttamente senza l'errore "-2147016672".
Se non è possibile risolvere gli errori nei file di log usando questi metodi, è possibile che si verifichi un problema diverso. Per assistenza aggiuntiva, contattare il Servizio Supporto Tecnico Clienti Microsoft.