Criar Relatórios de OU do Active Directory com PowerShell

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é-requisitosSe 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:

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.

Objetos de outros domínios não podem ser contidos dentro das unidades organizacionais do Active Directory. As seções a seguir abordarão os comandos básicos para gerenciar UOs.

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. OIdentity 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

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?

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.

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/