Automacao do Active Directory com PowerShell
Gerenciar um Active Directory com centenas ou milhares de usuarios manualmente e impraticavel e propenso a erros. O PowerShell oferece cmdlets nativos para automatizar praticamente todas as tarefas administrativas do AD, desde provisionamento de usuarios ate auditoria de contas e gerenciamento de grupos. Este guia apresenta scripts praticos e essenciais que todo administrador Windows deve conhecer para tornar suas operacoes de AD mais eficientes e consistentes.
Provisionamento de Usuarios
Instale o modulo e crie usuarios individuais ou em massa:
# Instalar modulo RSAT (Windows Server)
Install-WindowsFeature RSAT-AD-PowerShell
Import-Module ActiveDirectory
# Criar usuario individual
New-ADUser -Name "Maria Silva" `
-SamAccountName "maria.silva" `
-UserPrincipalName "maria.silva@empresa.local" `
-GivenName "Maria" `
-Surname "Silva" `
-Department "TI" `
-Title "Analista de Sistemas" `
-Path "OU=TI,DC=empresa,DC=local" `
-AccountPassword (ConvertTo-SecureString "SenhaTemp123!" -AsPlainText -Force) `
-ChangePasswordAtLogon $true `
-Enabled $true
Para provisionamento em massa, prepare um arquivo CSV e processe-o com pipeline:
# Conteudo do CSV: Name,SamAccountName,UPN,Department,Title
Import-Csv -Path "C:\dados\novos_usuarios.csv" | ForEach-Object {
$password = ConvertTo-SecureString "SenhaInicial2026!" -AsPlainText -Force
New-ADUser -Name $_.Name `
-SamAccountName $_.SamAccountName `
-UserPrincipalName $_.UPN `
-Department $_.Department `
-Title $_.Title `
-Path "OU=$($_.Department),DC=empresa,DC=local" `
-AccountPassword $password `
-ChangePasswordAtLogon $true `
-Enabled $true
Write-Host "Usuario criado: $($_.Name)" -ForegroundColor Green
}
Gerenciamento de Grupos
Automatize a criacao de grupos e gerenciamento de membros:
# Criar grupo de seguranca
New-ADGroup -Name "Equipe-DevOps" `
-GroupScope Global `
-GroupCategory Security `
-Path "OU=Grupos,DC=empresa,DC=local" `
-Description "Equipe de DevOps - Acesso a servidores de producao"
# Adicionar membros ao grupo
Add-ADGroupMember -Identity "Equipe-DevOps" -Members "maria.silva","joao.santos"
# Listar membros de um grupo
Get-ADGroupMember -Identity "Equipe-DevOps" | Select-Object Name, SamAccountName
# Copiar membros de um grupo para outro
Get-ADGroupMember -Identity "Equipe-Dev" |
ForEach-Object { Add-ADGroupMember -Identity "Equipe-DevOps" -Members $_.SamAccountName }
# Encontrar todos os grupos de um usuario
Get-ADPrincipalGroupMembership -Identity "maria.silva" | Select-Object Name
Para garantir que um grupo contenha exatamente os membros especificados em uma lista, compare e sincronize:
$membrosDesejados = Import-Csv "C:\dados\membros_devops.csv" | Select-Object -ExpandProperty SamAccountName
$membrosAtuais = Get-ADGroupMember -Identity "Equipe-DevOps" | Select-Object -ExpandProperty SamAccountName
# Remover membros que nao estao na lista
$membrosAtuais | Where-Object { $_ -notin $membrosDesejados } |
ForEach-Object { Remove-ADGroupMember -Identity "Equipe-DevOps" -Members $_ -Confirm:$false }
# Adicionar membros faltantes
$membrosDesejados | Where-Object { $_ -notin $membrosAtuais } |
ForEach-Object { Add-ADGroupMember -Identity "Equipe-DevOps" -Members $_ }
Relatorios e Auditoria
Gere relatorios essenciais para manter o AD organizado e seguro:
# Contas inativas (sem login ha 90 dias)
$dataLimite = (Get-Date).AddDays(-90)
Search-ADAccount -AccountInactive -DateTime $dataLimite -UsersOnly |
Select-Object Name, SamAccountName, LastLogonDate |
Export-Csv "C:\relatorios\contas_inativas.csv" -NoTypeInformation
# Contas bloqueadas
Search-ADAccount -LockedOut | Select-Object Name, SamAccountName, LockedOut |
Format-Table -AutoSize
# Contas com senha expirada
Search-ADAccount -PasswordExpired | Select-Object Name, SamAccountName |
Export-Csv "C:\relatorios\senhas_expiradas.csv" -NoTypeInformation
# Usuarios criados nos ultimos 30 dias
$ultimos30dias = (Get-Date).AddDays(-30)
Get-ADUser -Filter { WhenCreated -ge $ultimos30dias } -Properties WhenCreated, Department |
Select-Object Name, Department, WhenCreated |
Sort-Object WhenCreated -Descending |
Format-Table -AutoSize
Automacao e Tarefas Agendadas
Crie scripts completos para tarefas recorrentes e agende sua execucao:
# Script de manutencao semanal - salvar como Manutencao-AD.ps1
$logFile = "C:\logs\manutencao_ad_$(Get-Date -Format 'yyyyMMdd').log"
# Desabilitar contas inativas
$inativas = Search-ADAccount -AccountInactive -DateTime (Get-Date).AddDays(-180) -UsersOnly
foreach ($conta in $inativas) {
Disable-ADAccount -Identity $conta.SamAccountName
"$((Get-Date).ToString()) - Desabilitada: $($conta.Name)" | Out-File $logFile -Append
}
# Desbloquear contas automaticamente (opcional)
Search-ADAccount -LockedOut | ForEach-Object {
Unlock-ADAccount -Identity $_.SamAccountName
"$((Get-Date).ToString()) - Desbloqueada: $($_.Name)" | Out-File $logFile -Append
}
Write-Host "Manutencao concluida. Log: $logFile"
Agende o script no Task Scheduler via PowerShell:
$action = New-ScheduledTaskAction -Execute "PowerShell.exe" `
-Argument "-NoProfile -ExecutionPolicy Bypass -File C:\scripts\Manutencao-AD.ps1"
$trigger = New-ScheduledTaskTrigger -Weekly -DaysOfWeek Monday -At 6am
Register-ScheduledTask -TaskName "Manutencao-AD-Semanal" `
-Action $action -Trigger $trigger -RunLevel Highest `
-User "EMPRESA\svc-admin" -Password "SenhaServico"
Resumo
O PowerShell transforma a administracao do Active Directory de uma serie de tarefas manuais repetitivas em processos automatizados, consistentes e auditaveis. Com scripts para provisionamento em massa, gerenciamento de grupos, relatorios de seguranca e manutencao automatica, voce reduz erros humanos e libera tempo para atividades estrategicas na administracao da infraestrutura Windows.