Remember to maintain security and privacy. Do not share sensitive information. Procedimento.com.br may make mistakes. Verify important information. Termo de Responsabilidade

Como Consultar Objetos no Active Directory via PowerShell

Este script em PowerShell fornece um menu interativo para realizar consultas detalhadas no Active Directory (AD). Ele permite visualizar informações sobre usuários, computadores e grupos, facilitando a administração e a auditoria do ambiente Windows Server.

Funcionalidades do Script

  • Consultar usuários detalhadamente (informações como nome, cargo, e-mail, status da conta, etc.).
  • Consultar computadores (hostname, sistema operacional, última autenticação, status, etc.).
  • Consultar grupos (lista de membros, tipo de grupo, escopo).
  • Listar usuários bloqueados, inativos ou nunca logados.
  • Exportar relatórios das consultas para CSV.

Pré-requisitos

  1. Executar o script com permissões administrativas no PowerShell.
  2. O módulo ActiveDirectory deve estar instalado:
    Install-WindowsFeature -Name "RSAT-AD-PowerShell"
  3. Configurar o domínio e a Organizational Unit (OU) base no início do script ($domain e $baseOU).

Código do Script

# Certifique-se de salvar este arquivo com codificação UTF-8 com BOM
Import-Module ActiveDirectory

# Configuração do domínio e base OU
$domain = ""
$baseOU = ""  

function Show-Menu {
    Clear-Host
    Write-Host "==============================================" -ForegroundColor Cyan
    Write-Host "          MENU DE CONSULTAS AD                " -ForegroundColor Yellow
    Write-Host "==============================================" -ForegroundColor Cyan
    Write-Host " Domínio: $domain" -ForegroundColor Green
    Write-Host "--------------------------------------------------------------"
    Write-Host "1 - Consultar detalhes de um usuário" -ForegroundColor White
    Write-Host "2 - Consultar detalhes de um computador" -ForegroundColor White
    Write-Host "3 - Consultar detalhes de um grupo" -ForegroundColor White
    Write-Host "4 - Listar usuários inativos" -ForegroundColor White
    Write-Host "5 - Listar usuários bloqueados" -ForegroundColor White
    Write-Host "6 - Listar usuários nunca autenticados" -ForegroundColor White
    Write-Host "7 - Listar computadores nunca autenticados" -ForegroundColor White
    Write-Host "8 - Exportar relatório de usuários" -ForegroundColor White
    Write-Host "9 - Exportar relatório de computadores" -ForegroundColor White
    Write-Host "10 - Exportar relatório de grupos" -ForegroundColor White
    Write-Host "0 - Sair do script" -ForegroundColor Red
    Write-Host "==============================================" -ForegroundColor Cyan
}

function Get-UserDetails {
    $username = Read-Host "Digite o nome do usuário"
    try {
        $user = Get-ADUser -Identity $username -Properties * -ErrorAction Stop
        Write-Host "`n===== Detalhes do Usuário =====" -ForegroundColor Cyan
        Write-Host "Nome: $($user.Name)"
        Write-Host "Login: $($user.SamAccountName)"
        Write-Host "E-mail: $($user.EmailAddress)"
        Write-Host "Cargo: $($user.Title)"
        Write-Host "Departamento: $($user.Department)"
        Write-Host "Status: $(if ($user.Enabled) {'Ativo'} else {'Inativo'})"
        Write-Host "Último logon: $($user.LastLogonDate)"
        Write-Host "Conta bloqueada: $(if ($user.LockoutTime -ne $null) {'Sim'} else {'Não'})"
    } catch {
        Write-Host "Erro ao buscar usuário: $_" -ForegroundColor Red
    }
}

function Get-ComputerDetails {
    $computername = Read-Host "Digite o nome do computador"
    try {
        $computer = Get-ADComputer -Identity $computername -Properties * -ErrorAction Stop
        Write-Host "`n===== Detalhes do Computador =====" -ForegroundColor Cyan
        Write-Host "Nome: $($computer.Name)"
        Write-Host "Sistema Operacional: $($computer.OperatingSystem)"
        Write-Host "Versão SO: $($computer.OperatingSystemVersion)"
        Write-Host "Último logon: $($computer.LastLogonDate)"
        Write-Host "Status: $(if ($computer.Enabled) {'Ativo'} else {'Inativo'})"
    } catch {
        Write-Host "Erro ao buscar computador: $_" -ForegroundColor Red
    }
}

function Get-GroupDetails {
    $groupname = Read-Host "Digite o nome do grupo"
    try {
        $group = Get-ADGroup -Identity $groupname -Properties * -ErrorAction Stop
        $members = Get-ADGroupMember -Identity $groupname | Select-Object Name, SamAccountName
        Write-Host "`n===== Detalhes do Grupo =====" -ForegroundColor Cyan
        Write-Host "Nome: $($group.Name)"
        Write-Host "Escopo: $($group.GroupScope)"
        Write-Host "Categoria: $($group.GroupCategory)"
        Write-Host "Membros:"
        $members | Format-Table -AutoSize
    } catch {
        Write-Host "Erro ao buscar grupo: $_" -ForegroundColor Red
    }
}

function Get-InactiveUsers {
    Write-Host "`n===== Usuários Inativos =====" -ForegroundColor Cyan
    Get-ADUser -Filter {Enabled -eq $false} | Select-Object Name, SamAccountName | Format-Table -AutoSize
}

function Get-LockedUsers {
    Write-Host "`n===== Usuários Bloqueados =====" -ForegroundColor Cyan
    Get-ADUser -Filter * -Properties LockoutTime | Where-Object { $_.LockoutTime -ne $null } | 
    Select-Object Name, SamAccountName | Format-Table -AutoSize
}

function Get-NeverLoggedUsers {
    Write-Host "`n===== Usuários Nunca Autenticados =====" -ForegroundColor Cyan
    Get-ADUser -Filter * -Properties LastLogonDate | Where-Object { $_.LastLogonDate -eq $null } | 
    Select-Object Name, SamAccountName | Format-Table -AutoSize
}

function Get-NeverLoggedComputers {
    Write-Host "`n===== Computadores Nunca Autenticados =====" -ForegroundColor Cyan
    Get-ADComputer -Filter * -Properties LastLogonDate | Where-Object { $_.LastLogonDate -eq $null } | 
    Select-Object Name | Format-Table -AutoSize
}

function Export-UserReport {
    $outputFile = Read-Host "Digite o nome do arquivo de saída (ex: usuarios.csv)"
    Get-ADUser -Filter * -Properties Name, SamAccountName, Enabled, LastLogonDate | 
    Export-Csv -Path $outputFile -NoTypeInformation
    Write-Host "Relatório de usuários exportado para $outputFile." -ForegroundColor Green
}

function Export-ComputerReport {
    $outputFile = Read-Host "Digite o nome do arquivo de saída (ex: computadores.csv)"
    Get-ADComputer -Filter * -Properties Name, Enabled, LastLogonDate, OperatingSystem | 
    Export-Csv -Path $outputFile -NoTypeInformation
    Write-Host "Relatório de computadores exportado para $outputFile." -ForegroundColor Green
}

function Export-GroupReport {
    $outputFile = Read-Host "Digite o nome do arquivo de saída (ex: grupos.csv)"
    Get-ADGroup -Filter * -Properties Name, GroupScope, GroupCategory | 
    Export-Csv -Path $outputFile -NoTypeInformation
    Write-Host "Relatório de grupos exportado para $outputFile." -ForegroundColor Green
}

do {
    Show-Menu
    $input = Read-Host "Digite a opção desejada"
    switch ($input) {
        '1' { Get-UserDetails }
        '2' { Get-ComputerDetails }
        '3' { Get-GroupDetails }
        '4' { Get-InactiveUsers }
        '5' { Get-LockedUsers }
        '6' { Get-NeverLoggedUsers }
        '7' { Get-NeverLoggedComputers }
        '8' { Export-UserReport }
        '9' { Export-ComputerReport }
        '10' { Export-GroupReport }
        '0' { Write-Host "Saindo..." -ForegroundColor Red }
        default { Write-Host "Opção inválida, tente novamente." -ForegroundColor Red }
    }
    if ($input -ne '0') { Read-Host "Pressione Enter para continuar" }
} until ($input -eq '0')

To share Download PDF

Gostou do artigo? Deixe sua avaliação!
Sua opinião é muito importante para nós. Clique em um dos botões abaixo para nos dizer o que achou deste conteúdo.