Olá pessoal, tudo bem?
Atualmente estou trabalhando em um projeto grande de Active Directory de uma grande empresa. Cada dia estar sendo um aprendizado, pois nunca tinha trabalhado com um Active Directory tão grande, incluído vários servidores, vários domínios e florestas.
Recebi uma tarefa que era mover objetos computadores para várias OUs especificas. Fiz uma pesquisa rápida na internet encontrei vários artigos, utilizando o cmdlet Move-ADObject Powershell. Mas nenhum destes artigos explicava muito bem todos os parâmetros. Então resolvi escrever este artigo mostrando o que o script faz, passo a passo.
Solução
O principal desafio desta tarefa, era que os objetos dos computadores estão espalhados em várias OUs, dentro do domínio do Active Directory, o que dificulta muito a tarefa.
Recebi uma planilha com os hostnames dos computadores e as respectivas OUs que os objetos computadores deveriam ser movidas.
Poder do Powershell
Então com base nos vários artigos e comandos encontrados na internet, criei este script:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
# Especifique o caminho para o arquivo de texto com os nomes de conta do computador. $computers = Get-Content \\ADDS\movimenta-computer\move-computer.txt # Especifique o caminho para a UO para onde os computadores serão movidos. $TargetOU = "OU=Computadores,OU=TI,DC=contoso,DC=local" # Mover computadores para a nova UO. ForEach($computer in $computers){ Get-ADComputer $computer | Move-ADObject -TargetPath $TargetOU } |
Temos duas variáveis que devemos ter muita atenção.
A primeira variável e a $computers, podemos usar um caminho de compartilhamento do arquivo de texto como também um caminho local do computador, exemplo:
$computers = Get-Content C:\movimenta-computer\move-computer.txt
A segunda variável seria a $TargetOU, que é o caminho da OU que vamos mover os objetos computadores do Active Directory e o parâmetro DistinguishedName, que você pode obter com o cmdlet Get-ADOrganizationalUnit, ou graficamente usando o Usuários e Computadores do Active Directory, conforme demostrado na imagem abaixo.
Agora é só criar um arquivo de texto com os hostnames de cada computador que deseja mover para OU específica. Se for usar compartilhamento para o script, basta criar um compartilhamento de arquivos com acesso a somente a leitura.
Observação: Os hostnames dos computadores devem estar escritos, um em cada linha do arquivo de texto.
Com script pronto, agora é só executar e depois verificar se realmente os objetos computadores foram movidos para OU desejada, conforme demostrado na imagem abaixo.
Script
Abaixe no meu GitHub, neste link aqui, o script utilizado neste artigo, altere da maneira que melhor atenda o seu cenário.
Referências
https://docs.microsoft.com/en-us/powershell/module/addsadministration/move-adobject?view=win10-ps
https://docs.microsoft.com/en-us/powershell/module/addsadministration/get-adcomputer?view=win10-ps
Inscreva-se no meu canal do YouTube!

Há 10 anos atuo na área de TI focado em suporte e administração de infraestrutura, especializado em plataformas Microsoft. Tenho grande experiência em troubleshooting, implantação, configuração e administração de funções e recursos de tecnologia Microsoft. Formado em Redes de Computadores pela faculdade Estácio de Sá de Belo Horizonte.
Comecei a compartilhar o meu conhecimento no ano de 2012, fazendo artigos e vídeos para o meu Blog. Em 2017 comecei a escrever artigos para o portal Cooperati.
Sou apaixonado em compartilhar o meu conhecimento. Meu lema é: um conhecimento só é válido quando compartilhado.
8 Responses
Olá
Teria como movimentar as VMs por iniciais de Names, exemplo.
GOISRV*
Boa tarde.
Muito obrigado por prestigiar o meu trabalho.
Cada VM possui um hostname, exemplo hostnames que começa com o nome GOISRV. Este script vai analisar a base de dados do domínio contoso.local e localizar os objetos computadores com os nomes iniciais GOISRV e mover para OU VMs “OU=VMs,DC=contoso,DC=local”
Depois e salvar o script com o formato .ps1.
$computerstomove = Get-ADComputer -LDAPFilter “(name=GOISRV*)” -SearchBase “cn=computers,dc=contoso,dc=local”
foreach ($computertomove in $computerstomove) {
Move-ADObject $computertomove -TargetPath “OU=VMs,DC=contoso,DC=local”
}
Bom dia Gabriel.
Gabriel, teria como também além de mover por iniciais do nome, mover para OUs instintas?
No meu ambiente existe vários servidores de várias unidades, onde cada unidade tem sua inicial exemplo: goisrv, poasrv, jvsrv e por ai em diante, preciso mover cada vm para OUs diferente.
Bom dia.
Muito obrigado por prestigiar o meu trabalho.
Sim basta criar um script diferente para cada OU que deseja mover os objetos computadores.
Me ajudou muito, obrigado!
Eu precisava de um que movesse assim como o seu mas também desabilitasse as maquinas, não consegui nenhum que funcionasse no ambiente e confesso que sou leigo de mais para editar eles kkk, mas com o seu consegui mover para uma OU especifica e desabilitei manualmente daí.
Bom dia. Muito obrigado por prestigiar o meu trabalho. Fico muito feliz por ter lhe ajudado com o meu conhecimento.
Para seu conhecimento existe o modo de Powershell o Active Directory com todos os comandos.
https://docs.microsoft.com/en-us/powershell/module/activedirectory/?view=windowsserver2022-ps&WT.mc_id=WDIT-MVP-5003815
Também encontrei este script que move e desabilita computadores, talvez possa de ajudar.
https://social.technet.microsoft.com/Forums/pt-BR/137ee573-5c02-4ea0-8d19-339a5fddff7e/script-desabilitar-e-mover-mquinas-de-ou?forum=w8serverpt
Como faria para fazer este mesmo processo porem com usuarios e nao computadores ? Poderia me ajudar por gentileza ! Obrigado
Boa noite.
Muito obrigado por prestigiar o meu trabalho. Agora vamos a sua dúvida
O processo de mover usuários pode ser feito usando a Central Administrativa do Active Directory, Usuários e Computadores do Active Directory ou Powershell que o seu caso.
Logo abaixo um exemplo de como pode ser feito usando o Powershell.
# Especifique o caminho para o arquivo de texto com os nomes de conta dos usuários.
$users = Get-Content “\\ADDS\movimenta-user\move-user.txt”
# Especifique o caminho para a UO (Unidade Organizacional) para onde os usuários serão movidos.
$TargetOU = “OU=Usuários,OU=TI,DC=contoso,DC=local”
# Mover usuários para a nova UO (Unidade Organizacional).
ForEach ($user in $users) {
Get-ADUser $user | Move-ADObject -TargetPath $TargetOU
}
Foram usandos os seguintes comandos:
https://learn.microsoft.com/pt-br/powershell/module/microsoft.powershell.management/get-content?view=powershell-7.4&WT.mc_id=AZ-MVP-5003815
https://learn.microsoft.com/en-us/powershell/module/activedirectory/get-aduser?view=windowsserver2022-ps&WT.mc_id=AZ-MVP-5003815
https://learn.microsoft.com/en-us/powershell/module/activedirectory/move-adobject?view=windowsserver2022-ps&WT.mc_id=AZ-MVP-5003815
Espero ter lhe ajudado! # MVPBuzz