Como excluo esse objeto de computador órfão do Active Directory (de preferência com o PowerShell)?

20

Estou trabalhando em uma estação de trabalho Windows 7, com o PowerShell v2.0, e tentando excluir um objeto específico (órfão?) Do LostAndFoundcontêiner em uma floresta e domínio FL 2008 R2 com a Lixeira do Active Directory ativada e sem sorte com qualquer coisa .

É importante ressaltar que preciso excluir este objeto, e apenas esse objeto (em vez de excluir todos os objetos com a IsDeletedpropriedade, o que parece ser tudo em que posso encontrar ajuda).

Preciso excluí-lo, porque, para resolver um relacionamento de confiança interrompido, o computador foi separado do domínio (presumivelmente fazendo com que o objeto fosse para a Lixeira e depois para o LostAndFoundcontêiner), e gostaríamos de dar a ele seu nome original de volta (que é baseado no número da etiqueta do ativo no PC). Tentativas de reconectar o computador ao domínio com o nome correto falharam com a mensagem de erro abaixo ( The specified account does not exist)

insira a descrição da imagem aqui

e tentar renomeá-lo para o nome correto, uma vez que já esteja no domínio, falhará com a mensagem de erro abaixo ( The account already exists)

insira a descrição da imagem aqui

então o PC atual está sentado lá com um nome incorreto, o que eu preciso corrigir.

No entanto, a tentativa de excluir este objeto AD produz o erro: The specified account does not exist. O nome distinto do objeto tem um \caractere (barra invertida), que eu suponho que seja devido a ele estar no LostAndFoundcontêiner, e estou me perguntando se esse é o problema ... e como corrigi-lo. Estou executando meu shell como um domain admin, verifiquei que o domain adminsgrupo tem controle total e propriedade do objeto em questão, e simplesmente não consigo entender isso.

O objeto em questão (um pouco redigido):

Get-ADObject "CN=SomeComputer\0ADEL:90a13eaa-c7b0-4258-bebb-87b7aed39ec6,CN=LostAndFound,DC=MyEmployer,DC=prv" -IncludeDeletedObjects -Properties *

accountExpires                  : 9223372036854775807
CanonicalName                   : MyEmployer.prv/LostAndFound/SomeComputer
                                  DEL:90a13eaa-c7b0-4258-bebb-87b7aed39ec6
CN                              : SomeComputer
                                  DEL:90a13eaa-c7b0-4258-bebb-87b7aed39ec6
codePage                        : 0
countryCode                     : 0
Created                         : 12/7/2012 9:25:30 PM
createTimeStamp                 : 12/7/2012 9:25:30 PM
Deleted                         :
Description                     : HP6300
DisplayName                     :
DistinguishedName               : CN=SomeComputer\0ADEL:90a13eaa-c7b0-4258-bebb-87b7aed39ec6,CN=LostAndFound,DC=MyEmployer,DC=
                                  prv
dNSHostName                     : SomeComputer.MyEmployer.prv
dSCorePropagationData           : {5/21/2014 1:40:31 PM, 12/31/1600 7:00:00 PM}
instanceType                    : 4
isCriticalSystemObject          : False
isDeleted                       :
LastKnownParent                 : OU=Workstations,OU=Computers,OU=One of Our Sites,DC=MyEmployer,DC=prv
lastLogonTimestamp              : 130451668084269817
localPolicyFlags                : 0
memberOf                        : {CN=PCMilerComputers,DC=MyEmployer,DC=prv}
Modified                        : 5/21/2014 1:40:54 PM
modifyTimeStamp                 : 5/21/2014 1:40:54 PM
msDS-LastKnownRDN               : SomeComputer
Name                            : SomeComputer
                                  DEL:90a13eaa-c7b0-4258-bebb-87b7aed39ec6
nTSecurityDescriptor            : System.DirectoryServices.ActiveDirectorySecurity
ObjectCategory                  :
ObjectClass                     : computer
ObjectGUID                      : 90a13eaa-c7b0-4258-bebb-87b7aed39ec6
objectSid                       : S-1-5-21-1708945318-605057401-313073093-5882480
operatingSystem                 : Windows 7 Enterprise
operatingSystemServicePack      : Service Pack 1
operatingSystemVersion          : 6.1 (7601)
primaryGroupID                  : 515
ProtectedFromAccidentalDeletion : False
pwdLastSet                      : 130451667147545072
sAMAccountName                  : SomeComputer$
sDRightsEffective               : 15
servicePrincipalName            : {HOST/SomeComputer, HOST/SomeComputer.MyEmployer.prv}
userAccountControl              : 4096
userCertificate                 : [Not included]
uSNChanged                      : 54007434
uSNCreated                      : 5004556
whenChanged                     : 5/21/2014 1:40:44 PM
whenCreated                     : 12/7/2012 9:25:30 PM

Nada que eu tentei parece funcionar, e eu tentei muito. Na mesma nota, o que eu tentei, abaixo.

Primeiro, com um cmdlet simples do PowerShell de uma linha:


Get-ADObject "CN=SomeComputer\0ADEL:90a13eaa-c7b0-4258-bebb-87b7aed39ec6,CN=LostAndFound,DC=MyEmployer,DC=prv" -IncludeDeletedObjects | Remove-ADObject

Confirm
Are you sure you want to perform this action?
Performing operation "Remove" on Target
"CN=SomeComputer\0ADEL:90a13eaa-c7b0-4258-bebb-87b7aed39ec6,CN=LostAndFound,DC=MyEmployer,DC=prv".
[Y] Yes  [A] Yes to All  [N] No  [L] No to All  [S] Suspend  [?] Help (default is "Y"): y
Remove-ADObject : The specified account does not exist
At line:1 char:145
+ Get-ADObject "CN=SomeComputer\0ADEL:90a13eaa-c7b0-4258-bebb-87b7aed39ec6,CN=LostAndFound,DC=MyEmployer,DC=prv" -IncludeDeletedObjects | Remove-ADObject <<<<
    + CategoryInfo          : NotSpecified: (CN=SomeComputer\0ADE...MyEmployer,DC=prv:ADObject) [Remove-ADObject], ADException
    + FullyQualifiedErrorId : The specified account does not exist,Microsoft.ActiveDirectory.Management.Commands.RemoveADObject

Em seguida, a mesma coisa, referenciando o GUID.


Get-ADObject "90a13eaa-c7b0-4258-bebb-87b7aed39ec6"  -IncludeDeletdObjects | Remove-ADObject

Confirm
Are you sure you want to perform this action?
Performing operation "Remove" on Target
"CN=SomeComputer\0ADEL:90a13eaa-c7b0-4258-bebb-87b7aed39ec6,CN=LostAndFound,DC=MyEmployer,DC=prv".
[Y] Yes  [A] Yes to All  [N] No  [L] No to All  [S] Suspend  [?] Help (default is "Y"): y
Remove-ADObject : The specified account does not exist
At line:1 char:94
+ Get-ADObject "90a13eaa-c7b0-4258-bebb-87b7aed39ec6"  -IncludeDeletedObjects | Remove-ADObject <<<<
    + CategoryInfo          : NotSpecified: (CN=SomeComputer\0ADE...MyEmployer,DC=prv:ADObject) [Remove-ADObject], ADException
    + FullyQualifiedErrorId : The specified account does not exist,Microsoft.ActiveDirectory.Management.Commands.RemoveADObject

Então, lendo o valor em uma variável primeiro. (Tentei com o GUID e o DN, mostrando apenas um, pois eles produzem o mesmo erro).


$blah = "90a13eaa-c7b0-4258-bebb-87b7aed39ec6"
Get-ADObject $blah -IncludeDeletedObjects | Remove-ADObject

Confirm
Are you sure you want to perform this action?
Performing operation "Remove" on Target
"CN=SomeComputer\0ADEL:90a13eaa-c7b0-4258-bebb-87b7aed39ec6,CN=LostAndFound,DC=MyEmployer,DC=prv".
[Y] Yes  [A] Yes to All  [N] No  [L] No to All  [S] Suspend  [?] Help (default is "Y"): y
Remove-ADObject : The specified account does not exist
At line:1 char:60
+ Get-ADObject $blah -IncludeDeletedObjects | Remove-ADObject <<<<
    + CategoryInfo          : NotSpecified: (CN=SomeComputer\0ADE...MyEmployer,DC=prv:ADObject) [Remove-ADObject], ADException
    + FullyQualifiedErrorId : The specified account does not exist,Microsoft.ActiveDirectory.Management.Commands.RemoveADObject

Então imaginei que poderia viver tendo que ligar para o DSRM em vez de fazê-lo nativamente.


dsrm "CN=SomeComputer\0ADEL:90a13eaa-c7b0-4258-bebb-87b7aed39ec6,CN=Lost
AndFound,DC=MyEmployer,DC=prv"

Are you sure you wish to delete CN=SomeComputer\0ADEL:90a13eaa-c7b0-4258-bebb-87b7aed39ec6,CN=LostAndFound,DC=MyEmployer,DC=prv
 (Y/N)? y
dsrm failed:CN=SomeComputer\0ADEL:90a13eaa-c7b0-4258-bebb-87b7aed39ec6,CN=LostAndFound,DC=MyEmployer,DC=prv:The specified account does not exist.

Então eu disse para o inferno ao torná-lo automatizável, vou apenas clicar com o botão direito e excluí-lo através do ADSIedit .

insira a descrição da imagem aqui


Então, finalmente, estou engolindo meu orgulho e perguntando aqui. Como diabos eu me livro desse maldito objeto? Existe claramente, e sua existência está causando problemas, mas todas as minhas tentativas de excluí-lo do Active Directory são recebidas com mentiras, mentiras condenadas e mensagens de erro.


Atualizar:

Outras coisas que não funcionaram, com base em comentários, sugestões e discussões com o ServerFaulters:

Escapando do 0, como se o \0representasse um byte nulo.


Get-ADObject "CN=SomeComputer`0ADEL:90a13eaa-c7b0-4258-bebb-87b7aed39ec6,CN=LostAndFound,DC=MyEmployer,DC=prv" -IncludeDeletedObjects | Remove-ADObject

Get-ADObject : No superior reference has been configured for the directory service. The directory service is therefore unable to issue referrals to objects outside this forest
At line:1 char:13
+ Get-ADObject <<<<  "CN=SomeComputer`0ADEL:90a13eaa-c7b0-4258-bebb-87b7aed39ec6,CN=LostAndFound,DC=MyEmployer,DC=prv" -Includ
eDeletedObjects | Remove-ADObject
    + CategoryInfo          : NotSpecified: (CN=SomeComputer ADEL...MyEmployer,DC=prv:ADObject) [Get-ADObject], ADException
    + FullyQualifiedErrorId : No superior reference has been configured for the directory service. The directory service is therefore unable to issue referrals to objects outside this forest,Microsoft.ActiveDirectory.Management.Commands.GetADObject

Escapando o todo \0A, como se fosse um retorno de carro ou uma nova linha, como no DOS (tente com `n,` r, `n`r e` r`n). Todos retornaram o mesmo erro, sendo mostrados apenas uma vez.


Get-ADObject "SomeComputer`n`rDEL:90a13eaa-c7b0-4258-bebb-87b7aed39ec6,CN=LostAndFound,DC=MyEmployer,DC=prv" -IncludeDeletedObjects | Remove-ADObject

Get-ADObject : The object name has bad syntax
At line:1 char:13
+ Get-ADObject <<<<  "CN=SomeComputer`n`rDEL:90a13eaa-c7b0-4258-bebb-87b7aed39ec6,CN=LostAndFound,DC=MyEmployer,DC=prv" -IncludeDeletedObjects | Remove-ADObject
    + CategoryInfo          : NotSpecified: (CN=SomeComputer
DEL...MyEmployer,DC=prv:ADObject) [Get-ADObject], ADException
    + FullyQualifiedErrorId : The object name has bad syntax,Microsoft.ActiveDirectory.Management.Commands.GetADObject

Escapando \0Acomo um feed de formulário (sim, ficando um pouco desesperado).


Get-ADObject "CN=SomeComputer`fDEL:90a13eaa-c7b0-4258-bebb-87b7aed39ec6,CN=LostAndFound,DC=MyEmployer,DC=prv" -IncludeDeletedObjects | Remove-ADObject

Get-ADObject : Directory object not found
At line:1 char:13
+ Get-ADObject <<<<  "CN=SomeComputer`fDEL:90a13eaa-c7b0-4258-bebb-87b7aed39ec6,CN=LostAndFound,DC=MyEmployer,DC=prv" -IncludeDeletedObjects | Remove-ADObject
    + CategoryInfo          : ObjectNotFound: (CN=SomeComputerDEL:...MyEmployer,DC=prv:ADObject) [Get-ADObject], ADIdentityNotFoundException
    + FullyQualifiedErrorId : Directory object not found,Microsoft.ActiveDirectory.Management.Commands.GetADObject

Então imaginei que deveria determinar se o \0Apersonagem era o problema, então escolhi um objeto diferente com o qual não me importava na lixeira do AD com a \0Acorda e tentei afastá-lo. Funcionou.


Get-ADObject -Filter { Name -Like '*DEL:*' } -IncludeDeletedObjects | Remove-ADObject

Confirm
Are you sure you want to perform this action?
Performing operation "Remove" on Target "CN=SomeServer-SomeJackass HP LaserJet 1320
PS\0ADEL:eddb23e7-b8d8-4d00-801f-22d82c169d66,CN=Deleted Objects,DC=MyEmployer,DC=prv".
[Y] Yes  [A] Yes to All  [N] No  [L] No to All  [S] Suspend  [?] Help (default is "Y"): y

Confirm
Are you sure you want to perform this action?
Performing operation "Remove" on Target "CN=SomeServer-SomeJackass HP LaserJet 1320 PCL
5e\0ADEL:6e72e78f-f110-492c-ad50-91107f6fbd6a,CN=Deleted Objects,DC=MyEmployer,DC=prv".
[Y] Yes  [A] Yes to All  [N] No  [L] No to All  [S] Suspend  [?] Help (default is "Y"): y

HopelessN00b
fonte
4
As perguntas sobre falha do servidor devem demonstrar um entendimento mínimo da tecnologia em questão. Caso contrário, a postagem geralmente se transforma em um fórum de discussão , em vez de perguntas e respostas diretas. O melhor conselho que podemos dar é contratar um consultor para ajudá-lo ou fazer mais pesquisas sobre o básico dessa tecnologia.
TheCleaner
Retorna $C = Get-ADObject -Filter { Name -Like '*DEL:*' }apenas seu órfão? Remove-ADObject -Identity $C.DistinguishedNameNesse caso, faça Isso \0é um terminador nulo.
Ryan Ries
@RyanRies Ele retorna apenas meu objeto, mas a execução também retorna o mesmo The specified account does not existerro. Pelo que vale a pena, eu também tentei tratar o \0byte nulo (e escapá-lo), bem como tratar o \A0retorno de carro / quebra de linha (como no DOS), também sem alegria. Várias tentativas de adivinhar e escapar dos \A0personagens foram cumpridas com The object name has bad syntaxe Directory object not found. :(
HopelessN00b
Que chatice ... Eu uso essa técnica em objetos de resolução de conflitos ( '*CNF:*') o tempo todo e funciona perfeitamente.
Ryan Ries

Respostas:

3

De acordo com o engenheiro de suporte da Microsoft com quem falei ... e o engenheiro da Microsoft que ele me escalou para ... e seu gerente, a resposta curta é que a única maneira de me livrar desse objeto amaldiçoado é fazer uma restauração autorizada antes a aparência desse objeto no LostAndFoundcontêiner. Estou convencido de que também poderia me livrar disso inicializando todos os controladores de domínio nos LiveCDs e editando manualmente o banco de dados do AD, mas, com exceção dessas duas não opções, estou presa a ele.


Quanto a como e por que esse é o caso:

Executamos um repadmin /showobjmetacontra o objeto (para examinar seus metadados) e pudemos determinar a partir da isDeletedversão do objeto ( 2) que ele foi excluído e, em seguida, inesperadamente e sem sucesso / parcialmente restaurado, que é o que está causando o problema. Foi sugerido, e me parece provável, que depois que o objeto foi restaurado, mas antes que a alteração fosse completamente replicada, ele foi excluído novamente, juntamente com a UO pai, causando a falha da restauração e resultando em uma operação considerada órfã. objeto de pelo menos alguns de nossos controladores de domínio, aterrando-o no LostAndFoundcontêiner.

Como resultado da restauração parcial, ela não pode ser restaurada. Como o objeto está SAMAccountTypevazio , ele não pode ser excluído (ou modificado).

O SAMAccountTypeatributo é um valor que não pode ser alterado por nenhum usuário e, ao fazer isso, gera o erro abaixo:

insira a descrição da imagem aqui

Operation failed. Error code: 0x209a
Access to the attribute is not permitted because the attribute is owned by the Security Accounts Manager (SAM).

0000209A: SvcErr: DSID-031A1021, problem 5003
(WILL_NOT_PERFORM), data 0

Não podemos restaurar o objeto para que o sistema (Security Accounts Manager) defina esse atributo devido ao estado parcialmente restaurado em que está e não podemos excluí-lo (ou modificá-lo) sem um valor válido para esse atributo.


No entanto, como esse é um caso muito interessante para eu simplesmente me afastar, vou bisbilhotar por um tempo e ver se não consigo encontrar uma maneira de contornar isso, ou pelo menos expandir meu conhecimento sobre AD um pouco mais na tentativa. Supera a solução de problemas de impressoras ... e, francamente, acontece que um computador me dizendo "WILL_NOT_PERFORM" é um desafio que não consigo resistir.

Oh sim, você vai se apresentar, caramba!

HopelessN00b
fonte
1

Com base nesta postagem , talvez você precise excluir o objeto em controladores de domínio específicos. Você pode tentar executar o Get-ADObject com o parâmetro -Server para determinar se o objeto está limitado a controladores de domínio específicos. Então eu faria o mesmo com o Remove-ADObject.

Tim Ferrill
fonte
Esse não parece ser o problema, pois os dois CDs no meu site contêm o objeto, e a replicação dura bastante, mas nunca é demais fazer um repadmindiagnóstico completo (que venho executando desde que perdi a esperança de sendo um problema com o nome do objeto), resposta tão boa ... provavelmente não será a resposta aqui. Quando as diags forem concluídas, atualizarei minha postagem.
HopelessN00b
Parecia uma etapa razoável para a solução de problemas. Obrigado pela votação.
Tim Ferrill
0

Tenho uma ideia que pode funcionar, pode parecer um pouco simples ou fora do comum, mas se bem me lembro, isso funcionou para mim no passado com contas órfãs. Se você pode determinar o nome exato da conta, o sistema em que está trabalhando, seja uma conta de usuário ou PC / Server, tente criar temporariamente uma conta do mesmo tipo e do mesmo nome. Então você está essencialmente preenchendo os espaços em branco, por assim dizer e dando ao sistema exatamente o que ele deseja.

Portanto, se for uma conta de PC / servidor, faça com que uma máquina retorne ao domínio com o nome exato que está procurando, mas apenas com o objetivo de criar a conta. Ou, se for uma conta de usuário, recrie a conta de usuário com o mesmo nome, etc. pode ser necessário executar o comando gpupdate / f no prompt de comando para que o servidor reconecte a conta recém-criada à UO órfã.

Em seguida, tente excluir a UO órfã que você originalmente queria excluir. Depois de limpar a UO, você poderá excluir a conta criada para esta tarefa.

Espero que isso ajude você

Frank R
fonte