Como usar o PowerShell para administrar Active Directory

1. Introdução ao PowerShell para Active Directory

O módulo Active Directory para PowerShell (parte do RSAT-AD-PowerShell) é uma ferramenta essencial para administradores de rede que desejam automatizar tarefas de gerenciamento de diretório. Este módulo fornece centenas de cmdlets que permitem gerenciar usuários, grupos, computadores, unidades organizacionais e muito mais diretamente do terminal.

Pré-requisitos e instalação

Para utilizar o módulo, é necessário instalar as Ferramentas de Administração de Servidor Remoto (RSAT). No Windows Server, o recurso já está disponível; no Windows 10/11, deve ser instalado via:

Add-WindowsCapability -Name "Rsat.ActiveDirectory.DS-LDS.Tools~~~~0.0.1.0" -Online

Após a instalação, importe o módulo:

Import-Module ActiveDirectory

Para verificar se o módulo foi carregado corretamente:

Get-Command -Module ActiveDirectory | Measure-Object

Conexão ao domínio

O PowerShell para AD conecta-se automaticamente ao domínio do computador onde está sendo executado. Para especificar um controlador de domínio diferente ou usar credenciais alternativas:

Get-ADUser -Identity "joao.silva" -Server "dc01.empresa.local" -Credential (Get-Credential)

2. Gerenciamento de Usuários e Grupos

Criando usuários

O cmdlet New-ADUser permite criar contas com todas as propriedades necessárias:

New-ADUser -Name "Maria Oliveira" `
    -GivenName "Maria" `
    -Surname "Oliveira" `
    -SamAccountName "maria.oliveira" `
    -UserPrincipalName "maria.oliveira@empresa.local" `
    -EmailAddress "maria.oliveira@empresa.com" `
    -Path "OU=Funcionarios,DC=empresa,DC=local" `
    -AccountPassword (ConvertTo-SecureString "Senha@2024" -AsPlainText -Force) `
    -Enabled $true

Modificando e removendo usuários

# Alterar propriedades
Set-ADUser -Identity "maria.oliveira" -Department "TI" -Title "Analista"

# Desabilitar conta
Disable-ADAccount -Identity "joao.silva"

# Remover usuário
Remove-ADUser -Identity "usuario.inativo" -Confirm:$false

Gerenciamento de grupos

# Criar grupo de segurança
New-ADGroup -Name "GP_TI_Administradores" `
    -GroupScope Global `
    -GroupCategory Security `
    -Path "OU=Grupos,DC=empresa,DC=local"

# Adicionar membros
Add-ADGroupMember -Identity "GP_TI_Administradores" -Members "maria.oliveira", "carlos.santos"

# Remover membro
Remove-ADGroupMember -Identity "GP_TI_Administradores" -Members "carlos.santos" -Confirm:$false

3. Consultas e Filtros no Active Directory

Buscando objetos

O Get-ADUser é o cmdlet mais versátil para consultas:

# Todos os usuários habilitados
Get-ADUser -Filter {Enabled -eq $true} -Properties Department, Title

# Usuários de um departamento específico
Get-ADUser -Filter "Department -eq 'TI'" -Properties *

# Busca por UPN
Get-ADUser -Filter "UserPrincipalName -like '*@empresa.local'"

Filtros LDAP avançados

Para consultas complexas, utilize -LDAPFilter:

# Usuários criados nos últimos 30 dias
Get-ADUser -LDAPFilter "(&(objectClass=user)(whenCreated>=20240101000000.0Z))"

# Contas desabilitadas com senha expirada
Get-ADUser -LDAPFilter "(&(objectClass=user)(userAccountControl:1.2.840.113556.1.4.803:=2)(pwdLastSet=0))"

Paginação e seleção de propriedades

# Paginação para grandes volumes
Get-ADUser -Filter * -Properties LastLogonDate -ResultPageSize 500 -ResultSetSize $null

# Selecionar propriedades específicas
Get-ADUser -Identity "maria.oliveira" -Properties "LastLogonDate", "PasswordLastSet", "LockedOut"

4. Gerenciamento de Unidades Organizacionais (OUs)

Criando e movendo OUs

# Criar OU com proteção contra exclusão
New-ADOrganizationalUnit -Name "SetorFinanceiro" `
    -Path "DC=empresa,DC=local" `
    -ProtectedFromAccidentalDeletion $true

# Mover objetos entre OUs
Get-ADUser -Filter "Department -eq 'Financeiro'" | 
    Move-ADObject -TargetPath "OU=SetorFinanceiro,DC=empresa,DC=local"

Estrutura hierárquica

# Criar hierarquia de OUs
New-ADOrganizationalUnit -Name "Brasil" -Path "DC=empresa,DC=local"
New-ADOrganizationalUnit -Name "SP" -Path "OU=Brasil,DC=empresa,DC=local"
New-ADOrganizationalUnit -Name "Usuarios" -Path "OU=SP,OU=Brasil,DC=empresa,DC=local"

5. Administração de Computadores e Dispositivos

Descoberta e gerenciamento

# Listar todos os computadores
Get-ADComputer -Filter * -Properties OperatingSystem, LastLogonDate

# Computadores com sistema operacional específico
Get-ADComputer -Filter "OperatingSystem -like '*Windows 10*'"

# Habilitar/Desabilitar conta de computador
Enable-ADAccount -Identity "PC-ADMIN-01$"
Disable-ADAccount -Identity "PC-DESATIVADO-01$"

Movendo computadores entre OUs

Get-ADComputer -Filter "Name -like 'PC-VENDAS*'" | 
    Move-ADObject -TargetPath "OU=ComputadoresVendas,OU=Vendas,DC=empresa,DC=local"

6. Automação de Tarefas Repetitivas com Scripts

Criação em lote a partir de CSV

Arquivo usuarios.csv:

Nome,Sobrenome,Departamento,Email
Ana,Costa,TI,ana.costa@empresa.com
Pedro,Alves,RH,pedro.alves@empresa.com

Script de importação:

Import-Csv "C:\Scripts\usuarios.csv" | ForEach-Object {
    $nome = $_.Nome + "." + $_.Sobrenome
    New-ADUser -Name "$($_.Nome) $($_.Sobrenome)" `
        -GivenName $_.Nome `
        -Surname $_.Sobrenome `
        -SamAccountName $nome.ToLower() `
        -UserPrincipalName "$($nome.ToLower())@empresa.local" `
        -EmailAddress $_.Email `
        -Department $_.Departamento `
        -Path "OU=$($_.Departamento),DC=empresa,DC=local" `
        -AccountPassword (ConvertTo-SecureString "Temp@123" -AsPlainText -Force) `
        -Enabled $true `
        -ChangePasswordAtLogon $true
}

Relatório de contas inativas

$diasInatividade = 90
$dataLimite = (Get-Date).AddDays(-$diasInatividade)

Get-ADUser -Filter {LastLogonDate -lt $dataLimite -and Enabled -eq $true} `
    -Properties LastLogonDate, Name, SamAccountName | 
    Select-Object Name, SamAccountName, LastLogonDate |
    Export-Csv "C:\Relatorios\contas_inativas.csv" -NoTypeInformation

7. Segurança e Permissões no Active Directory

Gerenciamento de permissões delegadas

$ouPath = "OU=SetorFinanceiro,DC=empresa,DC=local"
$grupo = "GP_Admin_Financeiro"
$direitos = [System.DirectoryServices.ActiveDirectoryRights] "CreateChild, DeleteChild, WriteProperty"

# Conceder permissão para gerenciar usuários na OU
Add-ADGroupMember -Identity "Domain Admins" -Members $grupo
Set-ADObject -Identity $ouPath -Add @{nTSecurityDescriptor=$direitos}

Auditoria de alterações

# Habilitar auditoria em uma OU
Set-ADOrganizationalUnit -Identity "OU=Usuarios,DC=empresa,DC=local" `
    -AuditRule @{add="Success,Failure"}

# Verificar logs de auditoria (requer permissão de acesso ao log)
Get-WinEvent -LogName "Security" | Where-Object {$_.Id -eq 5136 -or $_.Id -eq 5137}

8. Troubleshooting e Dicas Avançadas

Erros comuns e soluções

# Verificar canal seguro com o domínio
Test-ComputerSecureChannel -Repair

# Testar conectividade com controlador de domínio
Test-Connection -ComputerName "dc01.empresa.local"

# Verificar replicação
repadmin /showrepl

Integração com outros módulos

# Combinar com módulo DHCP
Get-ADComputer -Filter "OperatingSystem -like '*Server*'" | 
    ForEach-Object { Get-DhcpServerv4Scope -ComputerName $_.Name }

# Combinar com módulo DNS
Get-ADComputer -Filter {Enabled -eq $true} | 
    ForEach-Object { Resolve-DnsName $_.Name -Type A }

Script de backup de objetos do AD

$backupPath = "C:\BackupAD\$(Get-Date -Format 'yyyyMMdd')"
New-Item -ItemType Directory -Path $backupPath -Force

# Exportar todos os usuários
Get-ADUser -Filter * -Properties * | 
    Export-Clixml -Path "$backupPath\usuarios.xml"

# Exportar grupos
Get-ADGroup -Filter * -Properties * | 
    Export-Clixml -Path "$backupPath\grupos.xml"

# Exportar OUs
Get-ADOrganizationalUnit -Filter * | 
    Export-Clixml -Path "$backupPath\ous.xml"

Referências