Administração de Active Directory

De Wiki Projeto Root
Revisão de 11h07min de 26 de maio de 2025 por Diegocosta (discussão | contribs) (Criou página com '== Sobre == Olá! Visitante, reunimos aqui, informações sobre como otimizar alguns processos em ambientes que tenham Active Directory, seja em Windows quando em Linux. == Comandos == Para verificar a data de expiração da senha de um usuário específico no Active Directory usando PowerShell, você pode usar o seguinte comando: Esse comando mostra a última vez que a senha foi alterada. Para calcular a expiração, é necessário saber a política de senha (normalm...')
(dif) ← Edição anterior | Revisão atual (dif) | Versão posterior → (dif)
Ir para navegação Ir para pesquisar

Sobre

Olá! Visitante, reunimos aqui, informações sobre como otimizar alguns processos em ambientes que tenham Active Directory, seja em Windows quando em Linux.


Comandos

Para verificar a data de expiração da senha de um usuário específico no Active Directory usando PowerShell, você pode usar o seguinte comando: Esse comando mostra a última vez que a senha foi alterada. Para calcular a expiração, é necessário saber a política de senha (normalmente 90 dias, por exemplo).

  1. Substitua 'usuario' pelo nome de login ou UPN
Get-ADUser -Identity "usuario" -Properties "PasswordLastSet" | Select-Object Name, PasswordLastSet


Para Verificar se a senha expira ou não (PasswordNeverExpires)

Get-ADUser -Identity "usuario" -Properties "PasswordNeverExpires" | Select-Object Name, PasswordNeverExpires

Scripts

Você pode usar este script PowerShell completo, que calcula exatamente isso com base na política do domínio, porem este este script é para pesquisar usuário por usuário, copie e salve como arquivo .bat e rode como administrador.

@echo off
setlocal ENABLEDELAYEDEXPANSION

:: Solicita o nome do usuário
set /p USERNAME=Digite o login do usuario AD (SamAccountName ou UPN): 

:: Executa PowerShell para pegar a expiração da senha
%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe -NoProfile -Command ^
"try { ^
    Import-Module ActiveDirectory -ErrorAction Stop; ^
    $user = Get-ADUser -Identity '%USERNAME%' -Properties 'msDS-UserPasswordExpiryTimeComputed','PasswordNeverExpires'; ^
    if ($null -eq $user) { Write-Host 'Usuario nao encontrado.'; exit 1 } ^
    if ($user.PasswordNeverExpires) { Write-Host 'A senha deste usuario nunca expira.'; exit 0 } ^
    $expira = [datetime]::FromFileTime($user.'msDS-UserPasswordExpiryTimeComputed'); ^
    $dias = ($expira - (Get-Date)).Days; ^
    Write-Host '----------------------------------------------'; ^
    Write-Host 'Usuario:       ' $user.SamAccountName; ^
    Write-Host 'Expira em:     ' $expira.ToString('dd/MM/yyyy HH:mm'); ^
    Write-Host 'Dias restantes:' $dias; ^
    Write-Host '----------------------------------------------'; ^
} catch { ^
    Write-Host 'Erro ao consultar o usuario ou o dominio.' ^
}"

pause

Para listar todos usuários com senha a expirar use este script, copie e salve como arquivo .ps1 e rode como administrador.


# Verifica se módulo ActiveDirectory está disponível
if (-not (Get-Module -ListAvailable -Name ActiveDirectory)) {
    Write-Host "O módulo ActiveDirectory não está instalado. Instale o RSAT." -ForegroundColor Red
    Read-Host -Prompt "Pressione ENTER para sair"
    exit
}

Import-Module ActiveDirectory

# Entrada: número de dias antes da expiração
$dias = Read-Host "Digite o número de dias para listar usuários com senha prestes a expirar"
if (-not [int]::TryParse($dias, [ref]0)) {
    Write-Host "Valor inválido. Informe um número inteiro." -ForegroundColor Red
    Read-Host -Prompt "Pressione ENTER para sair"
    exit
}
$dias = [int]$dias

$hoje = Get-Date
$resultados = @()

Write-Host "`nConsultando usuários do AD...`n" -ForegroundColor Cyan

$usuarios = Get-ADUser -Filter * -Properties msDS-UserPasswordExpiryTimeComputed, PasswordNeverExpires, Enabled, DisplayName, Mail

foreach ($u in $usuarios) {
    if ($u.Enabled -and -not $u.PasswordNeverExpires -and $u.'msDS-UserPasswordExpiryTimeComputed') {
        $expira = [datetime]::FromFileTime($u.'msDS-UserPasswordExpiryTimeComputed')
        $diasRest = ($expira - $hoje).Days
        if ($diasRest -ge 0 -and $diasRest -le $dias) {
            $resultados += [PSCustomObject]@{
                Usuario        = $u.SamAccountName
                Nome           = $u.DisplayName
                Email          = $u.Mail
                ExpiraEm       = $expira.ToString("dd/MM/yyyy")
                DiasRestantes  = $diasRest
            }
        }
    }
}

if ($resultados.Count -eq 0) {
    Write-Host "`nNenhum usuario com senha expirando em ate $dias dias." -ForegroundColor Yellow
} else {
    Write-Host "`nUsuarios com senha expirando em ate $dias dias:`n" -ForegroundColor Green
    $resultados | Sort-Object DiasRestantes | Format-Table -AutoSize
}

# Exportar?
$exportar = Read-Host "`nDeseja exportar os resultados para arquivo? (S/N)"
if ($exportar -match "^[Ss]$") {
    $tipo = Read-Host "Escolha o formato: csv ou txt"
    $caminho = Read-Host "Digite o caminho completo para salvar (ex: C:\temp\expira.csv) OBS: precisa informar!"
   
    try {
        if ($tipo -ieq "csv") {
            $resultados | Export-Csv -Path $caminho -Encoding UTF8 -NoTypeInformation
        } elseif ($tipo -ieq "txt") {
            $resultados | Out-File -FilePath $caminho -Encoding UTF8
        } else {
            Write-Host "Formato inválido. Nenhum arquivo exportado." -ForegroundColor Red
        }
        if (Test-Path $caminho) {
            Write-Host "Arquivo exportado para: $caminho" -ForegroundColor Cyan
        }
    } catch {
        Write-Host "Erro ao exportar: $_" -ForegroundColor Red
    }
}

Write-Host "`nConsulta finalizada." -ForegroundColor Cyan
Read-Host -Prompt "`nPressione ENTER para sair"

  • O que ele faz:

Pergunta quantos dias quer buscar;

Carrega todos os usuários do AD;

Ignora usuários desabilitados ou com senha que nunca expira;

Calcula quantos dias faltam para expirar;

Pergunta se quer exportar para um arquivo csv ou txt