Compartilhar via


Remover manualmente objetos persistentes em parceiros de replicação desatualizados

Este artigo ajuda a remover manualmente objetos persistentes depois que você coloca um controlador de domínio (DC) desatualizado ou um servidor de catálogo global online novamente. Em muitos casos, você pode limpar objetos persistentes usando o comando ou ferramentas como o repadmin /removelingeringobjects Liquidador de Objetos Persistentes. No entanto, essas instalações não funcionam se você tiver abandonado objetos.

Número original do KB: 314282

Quando você coloca um controlador de domínio ou servidor de catálogo global online novamente depois que ele estiver offline por um longo tempo, qualquer um dos seguintes problemas pode ocorrer:

  • As mensagens de email não são entregues a um usuário cujo objeto de usuário foi movido entre domínios. Depois de colocar o controlador de domínio desatualizado ou o servidor de catálogo global online novamente, ambas as instâncias do objeto de usuário aparecem no conteúdo do catálogo global. Ambos os objetos têm o mesmo endereço de email, portanto, as mensagens de email não podem ser entregues.
  • Uma conta de usuário que não existe mais ainda aparece na lista de endereços global.
  • Um grupo universal que não existe mais ainda aparece no token de acesso de um usuário.

A duração offline é maior do que o valor da configuração de tempo de vida da marca de exclusão

Um controlador de domínio ou servidor de catálogo global que está offline há mais tempo do que o valor da configuração de tempo de vida da marca de exclusão (o valor padrão é 60 ou 180 dias) pode conter objetos que foram excluídos em outros controladores de domínio ou servidores de catálogo global. Além disso, as marcas de exclusão desses objetos podem não existir mais. Quando você coloca o controlador de domínio desatualizado online novamente, ele não pode ser notificado sobre as exclusões de objetos. Se algum dos objetos for modificado, eles serão reativados no restante do domínio.

Para objetos persistentes que são replicados em contextos de nomenclatura de leitura/gravação, o comportamento padrão (Consistência de Replicação Solta) é que o controlador de domínio de recebimento recria os objetos que ainda não estão presentes na DIT (Árvore de Informações do Diretório) do banco de dados local. Esses objetos são replicados de volta para o controlador de domínio de origem, recriando efetivamente os objetos excluídos. Se o objeto não deveria existir no Active Directory (por exemplo, se o objeto foi reintroduzido por um controlador de domínio desatualizado), você pode excluir os objetos com ferramentas padrão (como ADSIEdit ou o snap-in Usuários e Computadores do Active Directory).

É simples remover objetos persistentes para contextos de nomenclatura de leitura/gravação. Este artigo descreve como remover objetos persistentes que já apareceram em contextos de nomenclatura de catálogo global (somente leitura).

Obtenha o nome distinto e identifique o domínio

A melhor maneira de identificar em qual domínio um objeto está localizado (e, portanto, o nome de um controlador de domínio que tem uma cópia de leitura/gravação do objeto) é estabelecer o nome distinto do objeto. Você pode fazer isso pesquisando o nome (ou parte do nome) do usuário, grupo ou lista de distribuição duplicado usando a ferramenta Ldp.exe :

  1. Comece Ldp.exe.

  2. No menu Conexão , selecione Conectar.

  3. Insira o nome de um servidor de catálogo global. Digite 3268 como a porta à qual se conectar. Selecione OK.

  4. No menu Conexão , selecione Vincular. Se suas credenciais atuais não forem suficientes para consultar todo o conteúdo do catálogo global, insira credenciais válidas. Selecione OK.

  5. No menu Exibir, selecione Árvore. Insira o nome distinto da raiz da floresta. Selecione OK.

  6. Clique com o botão direito do mouse na raiz da floresta na lista de árvores e selecione Pesquisar.

  7. Crie um filtro do seguinte formato:

    (atributo = valor)

    Substitua o atributo e o valor pelos dados apropriados. Por exemplo, para criar um filtro para retornar resultados em que o atributo sAMAccountName tem um valor definido como uma conta de usuário chamada testuser, insira (sAMAccountName=testuser) na caixa Filtro . Os atributos cn, userPrincipalName, sAMAccountName, name, mail e sn são candidatos úteis para localizar um objeto de usuário. Para objetos de grupo, use os atributos cn, sAMAccountName ou name . Você pode usar asteriscos (*) no campo de valor, se necessário.

    Para obter mais informações sobre a sintaxe de filtro LDAP (Lightweight Directory Access Protocol), consulte Sintaxe de filtro de pesquisa.

  8. Selecione Subárvore como o escopo da pesquisa.

  9. Selecione Opções. Na caixa de diálogo Opções de Pesquisa, vá para o final do controle Atributos.

  10. Acrescente objectGUID; à lista. Selecione OK.

  11. Clique em Executar para executar a consulta.

  12. Exiba os resultados. Você deve identificar quais dos objetos exibidos devem ser removidos do servidor de catálogo global. Uma indicação de que você encontrou um objeto problemático é que o objeto não existe em uma cópia de leitura/gravação do contexto de nomenclatura.

  13. Reformule a consulta e execute-a novamente, se necessário.

  14. Se você identificou o objeto persistente, observe seu nome distinto e objectGUID.

Depois de obter o nome distinto do objeto, identifique o domínio no qual ele estava localizado observando a parte dc= do nome distinto. Por exemplo, o domínio de cn=FirstName LastName,cn=Users,dc=contoso,dc=com é contoso.com. Em seguida, localize um controlador de domínio para o domínio (também pode ser um servidor de catálogo global).

Execute o repadmin /showreps <dcname> comando (onde <dcname> está o nome do controlador de domínio que você localizou). Na saída, observe o controlador de objectGuiddomínio:

C:\>repadmin /showreps some-DC
Your-Site\some-DC
DSA Options : (none)
objectGuid : <GUID>

Exclua objetos persistentes se você tiver apenas alguns objetos e servidores de catálogo global

Se você tiver apenas alguns objetos e servidores de catálogo global, siga estas etapas para excluir os objetos usando Ldp.exe:

  1. Entre em cada servidor de catálogo global que contém uma cópia do objeto persistente usando as credenciais do Enterprise Administrator.

  2. Inicie Ldp.exe e conecte-se à porta 389 no controlador de domínio local (deixe a caixa Servidor vazia).

  3. No menu Conexão , selecione Vincular. Deixe todas as caixas vazias (você já está conectado como Administrador Corporativo).

  4. No menu Procurar , selecione Modificar.

  5. Deixe a caixa Dn vazia.

  6. Na caixa Atributo, insira RemoveLingeringObject.

  7. Insira <GUID= como o valor.

  8. Acrescente o GUID do controlador de domínio que você obteve anteriormente do comando repadmin /showreps <dcname>.

    Observação

    Neste exemplo, <dcname> é um controlador de domínio que hospeda o contexto de nomenclatura gravável do objeto persistente.

  9. Anexar > : <GUID=. Não omita os espaços.

  10. Acrescente o GUID do objeto persistente.

  11. Anexar >.

  12. O valor completo deve ser semelhante a: <GUID=GUID> : <GUID=GUID>

  13. Selecione a operação Substituir e, em seguida, selecione Enter na interface. Agora o comando aparece na Lista de Entradas.

  14. Selecione Executar para executar a solicitação. O lado direito da janela Ldp.exe contém o resultado da solicitação. Ela será semelhante a este exemplo:

    ***Call Modify...
    ldap_modify_s(ld, '(null)',[1] attrs);
    Modified "".
    

Exclua objetos persistentes se você tiver muitos objetos e servidores de catálogo global

Se você tiver muitos objetos para excluir e muitos servidores de catálogo global, talvez seja mais conveniente usar os seguintes scripts:

  1. Cole o seguinte texto em um novo arquivo chamado Walkservers.cmd em uma nova pasta:

    for /f %%j in (server-list.txt) do walkobjects %%j
    
  2. Cole o seguinte texto em um arquivo chamado Walkobjects.cmd:

    for /f "delims=@" %%i in (object-list.txt) do cscript //NoLogo MODIFYROOTDSE.VBS %1 "%%i" >>update-%1.log
    

    Observação

    Esta é uma única linha de comando. As quebras de linha são inseridas aqui para facilitar a leitura.

  3. Cole o seguinte texto em um arquivo chamado 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
    

    Observação

    Se você iniciar Modifyrootdse.vbs manualmente, certifique-se de colocar todos os parâmetros que contenham espaços entre aspas.

  4. Crie uma lista de todos os servidores de catálogo global que contêm os objetos persistentes. Coloque os nomes dos servidores em um arquivo Server-list.txt na mesma pasta. Use os nomes de domínio totalmente qualificados para evitar pesquisas de sufixos DNS.

  5. Adicione os pares GUID obtidos anteriormente neste procedimento a um arquivo Object-list.txt . Adicione um par por linha. Use a seguinte sintaxe:

    <GUID = <DC GUID>> : <GUID = <object GUID>>

    Aqui, o primeiro valor é o GUID do controlador de domínio gravável que é usado para confirmar que o objeto original não existe mais. O segundo valor é o GUID do objeto persistente a ser removido.

  6. Execute o arquivo Walk-servers.cmd . Os scripts geram um arquivo de log chamado Update-server-name.log para cada servidor de catálogo global listado no arquivo Server-list.txt . Os arquivos de log contêm uma linha para cada objeto que deve ser excluído.

Observação

Erros nos arquivos de log não indicam necessariamente um problema porque os objetos persistentes podem não existir em todos os servidores de catálogo global. No entanto, as mensagens de erro no formato "operação recusada" ou "erro de operação" indicam um problema com os GUIDs ou a sintaxe do valor. Se esses erros ocorrerem, verifique os seguintes itens:

  • Verifique se os GUIDs do controlador de domínio são os GUIDs corretos para controladores de domínio que contêm uma cópia gravável do domínio que contém o objeto.
  • Verifique se os GUIDs de objeto identificam objetos persistentes em contextos de nomenclatura de catálogo global (somente leitura).

Mensagem de erro ao executar Walkservers.cmd para modificar muitos objetos remanescentes no ambiente

Objeto <GUID=GUID> : <GUID=GUID não pôde> ser removido. O número do erro é: -2147016672. A descrição do erro é: .

Esse erro ocorre porque o script é executado no GUID de um controlador de domínio que não contém uma partição gravável que contém o objeto persistente. Use a ferramenta Ldp.exe para verificar a localização do objeto persistente.

Exemplo

No exemplo a seguir, o objeto persistente que faz com que a mensagem de erro seja removida está localizado no corp.company.local domínio. No entanto, o <GUID=<GUID>> arquivo from the objects-list.txt está associado a company.local um controlador de domínio no domínio que não tem uma partição gravável para 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; 

Obtenha o GUID de um servidor no corp.company.local domínio executando o seguinte comando:

repadmin /showreps <dcname>

Nesse comando, <dcname> há um espaço reservado para o nome de um controlador de domínio no corp.company.local domínio. Altere o GUID no arquivo Objects-list.txt para corresponder ao GUID do controlador de domínio no corp.company.local domínio. Neste exemplo, o arquivo Objects-list.txt aparecerá como:

<GUID=<GUID>> : <GUID=<GUID>>

O primeiro <GUID> é o GUID do controlador de domínio no corp.company.local domínio. O segundo <GUID> é o GUID do objeto persistente da pesquisa LDAP.

Quando você executa Walk-servers.cmd, o comando agora é concluído com êxito sem o erro "-2147016672".

Se você não conseguir resolver os erros nos arquivos de log usando esses métodos, talvez esteja enfrentando um problema diferente. Entre em contato com o Atendimento Microsoft para obter assistência adicional.