Crie Relatórios de Unidades Organizacionais do Active Directory com PowerShell. Uma unidade organizacional (OU) é um contêiner do Active Directory (AD) onde usuários, grupos, computadores e outras OUs podem ser armazenados. Cada domínio AD pode ter sua hierarquia de unidades organizacionais. Este artigo abordará a gestão de OUs e como usar scripts do Windows PowerShell para mover, criar, excluir e gerar relatórios de OU no AD e vincular e aplicar uma Política de Grupo a uma OU.
Crie Relatórios de Unidades Organizacionais do Active Directory com Powershell
Pré-requisitos Se quisermos acompanhar os scripts de exemplo deste artigo, precisaremos instalar os componentes pré-requisitados.
Se quisermos acompanhar os exemplos de scripts neste artigo, precisaremos instalar os componentes pré-requisitos:
- Nível funcional de domínio – Windows Server 2016.
- Ferramentas de Administração de Servidores Remotos (RSAT) para Active Directory instaladas em seu computador ingressado no domínio.
- A versão mais recente PowerShell ou, pelo menos, PowerShell 5. x e acima são necessárias para executar os scripts.
Bem, como criar relatórios de OU do Active Directory com PowerShell? Vamos descobrir.
Entendendo os comandos de Unidade Organizacional
A Microsoft Active Directory domain container that can hold users, groups, and computers is an organizational unit (OU). It is the smallest unit to which a Windows system administrator can assign a Group Policy setting or account permission. An organizational unit may contain multiple OUs, but each attribute within the containing OU must be distinct.
Crie UOs no Active Directory com o PowerShell
Podemos criar uma nova unidade organizacional no AD usando o New-ADOrganizationalUnit comando e especificando o nome de um novo objeto de OU. O Windows PowerShell criará por padrão a Organizational Unit no nível raiz do domínio. Por exemplo, o comando a seguir criará uma OU chamada IT no Controlador de Domínio (DC):
New-ADOrganizationalUnit “IT”
Se precisarmos de um caminho LDAP de OU diferente, use o -Path parâmetro do cmdlet para especificar seu nome distinto (DN):
New-ADOrganizationalUnit “IT” –Path “OU=Users,DC=InfraSOS,DC=com”
Mova uma OU no Active Directory com PowerShell
Se precisarmos mover uma OU para outro local, use o Move-ADObject cmdlet. É essencial notar que não devemos proteger a OU de destino contra exclusão acidental. Caso contrário, use o seguinte comando para remover a proteção:
Set-ADOrganizationalUnit -Identity "OU=IT,OU=Users,DC=InfraSOS,DC=Com" -ProtectedFromAccidentalDeletion $False
Agora podemos mover a OU para outro local:
Move-ADObject -Identity "OU=Regions,OU=Managers,DC=InfraSOS,DC=Com" -TargetPath "OU=IT,DC=InfraSOS,DC=Com"
Renomear uma OU no Active Directory com o PowerShell
Use o Rename-ADObject cmdlet para renomear uma unidade organizacional. O parâmetro Identity especifica o AD objeto a ser renomeado e requer o DN ou GUID. Por exemplo, este comando muda o nome da OU IT para Marketing:
Rename-ADObject -Identity "OU=Regions,OU=IT,DC=InfraSOS,DC=COM" -NewName Marketing
Também podemos usar o Get-ADOrganizationalUnit cmdlet com o -Filter parâmetro, que não requer o caminho LDAP completo para a OU. No entanto, esse cmdlet pesquisará todo o AD e o script aplicará a ação do comando a todas as Unidades Organizacionais com o termo de pesquisa em seus nomes:
Get-ADOrganizationalUnit -Filter "Name -eq 'Zones'" | Rename-ADObject -NewName Area
Falaremos mais sobre os comandos Get OU uma vez que começarmos a gerar relatórios.
Aplicando uma Política de Grupo a uma OU no Active Directory com PowerShell
Para atribuir uma Política de Grupo a uma Unidade Organizacional, podemos usar o comando New-GPLink, que vincula o Objeto de Política de Grupo (GPO) especificado e a Unidade Organizacional. Além disso, podemos identificar qualquer uma das seguintes propriedades para o link:
- Habilitado – Se o link tiver um status Habilitado, as configurações processadas do GPO serão aplicadas quando a Política de Grupo for aplicada às unidades, domínios e UO.
- Forçado – Se o link tiver um status Forçado, não poderemos bloquear a UO em um contêiner de nível inferior.
- Ordem – O status Ordemespecifica a precedência das configurações do GPO.
Por exemplo, o seguinte comando vincula o GPO Block à Unidade Organizacional IT com o link tanto ativado quanto enforçado:
New-GPLink -Name "Block" -Target "OU=Districts,OU=IT, DC=InfraSOS, DC=com" -LinkEnabled Yes -Enforced Yes
Mova Usuários e Computadores para uma Nova OU em um AD com PowerShell
Depois de criarmos uma Unidade Organizacional e opcionalmente vinculá-la a um GPO, preencheremos com usuários e computadores. Move-ADObject O cmdlet em PowerShell move qualquer objeto ou conjunto de objetos do diretório ativo para uma OU diferente. O–Identity parâmetro indica qual objeto deve ser realocado objeto Active Directory ou contêiner.
É crucial notar que devemos inserir o caminho completo do objeto LDAP ou SID; não podemos usar seu SamAccountName. O exemplo a seguir mostra como mover um usuário para a OU TI:
Move-ADObject -Identity "CN=marion,CN=Users,DC=InfraSOS,DC=com" -TargetPath "OU=IT,OU=Users,DC=InfraSOS,DC=com"
Use a sintaxe exata para mover objetos de computador . Por exemplo, o seguinte comando transferirá o computador DESKTOP-01 para o contêiner Computadores:
Move-ADObject -Identity "CN=DESKTOP-01,OU=Computers,DC=InfraSOS,DC=com" -TargetPath "CN=Workstations,DC=InfraSOS,DC=com"
Mover em massa computadores AD e usuários para outra OU
Se tivermos uma lista predefinida de objetos a serem movidos, podemos salvá-la como um arquivo de texto e, em seguida, importá-la para o Active Directory. Prepare sua lista adicionando um objeto AD por linha. O arquivo de texto contendo a lista deve ter um aspecto semelhante a este:

Use este script do PowerShell para mover contas de usuário AD listadas em um arquivo de texto:
$destOU = "OU=Users,OU=IT,DC=InfraSOS,DC=com"
$usersList = Get-Content -Path "C:\temp\users.txt"
$usersList | ForEach-Object {
$userName = (Get-ADUser -Identity $_.Name).distinguishedName
Move-ADObject -Identity $userName -TargetPath $destOU
}
Para mover contas de computador AD listadas em um arquivo de texto, use o seguinte script do PowerShell:
$computers = Get-Content -Path "C:\Temp\Computers.txt"
$destOU = "OU=Computers,OU=IT,DC=InfraSOS,DC=com"
ForEach( $computer in $computers){
Get-ADComputer $computer |
Move-ADObject -TargetPath $destOU
}
Remover uma OU do Active Directory com o PowerShell
O Remove-ADOrganizationalUnit cmdlet remove uma OU. No entanto, não devemos proteger a OU de exclusão acidental. Usando o Get-ADOrganizationalUnit e Set-ADOrganizationalUnit cmdlets, podemos remover a opção de exclusão inesperada para cada OU com a palavra Zones em seu nome:
Get-ADOrganizationalUnit -filter "Name -eq 'Zones'" | Set-ADOrganizationalUnit -ProtectedFromAccidentalDeletion $False
Use o seguinte cmdlet para remover cada OU que contém Zones em seu nome do AD:
Get-ADOrganizationalUnit -filter "Name -eq 'Zones'" | Remove-ADOrganizationalUnit –Recursive
O sistema nos solicitará para confirmar a exclusão:
Observe que o -Recursive parâmetro remove tanto a OU quanto todos os seus objetos filhos. O AD excluirá os objetos filhos mesmo que a proteção contra exclusão esteja ativada para eles.
Gerenciando Unidades Organizacionais no AD
Agora que discutimos os comandos básicos e parâmetros envolvendo Unidades Organizacionais, vamos discutir como podemos gerar relatórios de OU com PowerShell.
Obtenha uma lista de todas as OUs com PowerShell
Vamos usar o Get-ADOrganizationalUnit cmdlet. Primeiro, classifique por CanonicalName. Este comando exibe uma estrutura de OU mais fácil de ler.
Get-ADOrganizationalUnit -Properties CanonicalName -Filter * |
Sort-Object CanonicalName |
Format-Table CanonicalName, DistinguishedName
O exemplo a seguir é a saída no PowerShell quando executamos o comando:
A saída com todas as OUs no AD é uma excelente lista. Mas como sabemos se a OU contém algum usuário?
Leia também Veja os Relatórios de Grupo do Active Directory
Obtenha uma lista de todos os OUs, incluindo contagem de usuários, com PowerShell
Gostamos de usar o PowerShell para obter uma lista dos OUs, incluindo a contagem de usuários. Este comando nos dirá se há usuários no OU.
Get-ADOrganizationalUnit -Properties CanonicalName -Filter * |
Sort-Object CanonicalName |
ForEach-Object {
[pscustomobject]@{
Name = Split-Path $_.CanonicalName -Leaf
CanonicalName = $_.CanonicalName
UserCount = @(Get-AdUser -Filter * -SearchBase $_.DistinguishedName -SearchScope OneLevel).Count
}
}
Ele exibirá a saída com a propriedade da coluna UserCount. Se o valor da propriedade UserCount for zero, o OU não possui usuários. Não aparecerá se o OU contiver um objeto de computador. Este comando verificará e exibirá apenas a contagem de usuários.
Leia também Implantar Relatórios de Usuários do Office 365
Exportar OUs no AD para um arquivo CSV com PowerShell
Queremos exportar a lista de OUs no AD agora que a vimos. Portanto, o script usará PowerShell para obter as Unidades Organizacionais e exportá-las para um arquivo de texto.
$results = Get-ADOrganizationalUnit -Properties CanonicalName -Filter * | Sort-Object CanonicalName |
ForEach-Object {
[pscustomobject]@{
Name = Split-Path $_.CanonicalName -Leaf
CanonicalName = $_.CanonicalName
UserCount = @(Get-AdUser -Filter * -SearchBase $_.DistinguishedName -SearchScope OneLevel).Count
}
}
$results | Out-File C:\export_OUs.txt -Encoding UTF8
Altere a última linha para o seguinte comando se desejarmos exportar para um arquivo CSV:
$results | Export-Csv -Path C:\export_OUs.csv -NoTypeInformation -Encoding UTF8
Encontre o arquivo exportado na localização especificada após executar o comando acima.
Obrigado por ler Crie relatórios de OU do Active Directory com o PowerShell. Vamos concluir agora.
Conclusão sobre Criação de Relatórios de OU do Active Directory com o PowerShell
Agora que aprendemos a gerenciar OUs no Active Directory usando scripts do PowerShell, podemos automatizar várias operações relacionadas ao gerenciamento de OU e gerar relatórios correspondentes. Certifique-se de habilitar o recurso de Lixeira do Active Directory antes de executar esses comandos, para poder reverter facilmente qualquer exclusão errônea. Também é inteligente acompanhar todas as alterações em suas unidades organizacionais com cuidado.
Confira nosso conteúdo sobre PowerShell em nosso blog aqui.
Source:
https://infrasos.com/create-active-directory-ou-reports-with-powershell/