Administração de Active Directory
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).
- 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 estes scripts PowerShell para auxiliar na administração.
Verificação de expiração senhas
Este aqui calcula exatamente 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
Adicionar máquinas no AD Auto
Este script em PowerShell automatiza o processo de ingresso de computadores Windows em um domínio Active Directory, reduzindo a necessidade de configuração manual e permitindo que o procedimento seja realizado remotamente.
Funcionamento
Ao ser executado, o script verifica se possui privilégios administrativos. Caso contrário, solicita elevação de permissões (UAC), copia o próprio script para a pasta temporária do Windows e reinicia sua execução como Administrador. Esse mecanismo garante compatibilidade mesmo quando o script é executado a partir de um compartilhamento de rede (SMB).
Em seguida, são solicitadas as seguintes informações:
- Nome do domínio Active Directory.
- Endereço IP do DNS primário.
- Endereço IP do DNS secundário.
- Novo nome do computador.
- Opção para desativar o IPv6.
Antes de realizar qualquer alteração, o script valida todas as informações fornecidas, verificando:
- Formato válido dos endereços IP.
- Nome do domínio informado.
- Nome do computador não vazio.
- Limite máximo de 15 caracteres para o nome da máquina, garantindo compatibilidade com o Active Directory e NetBIOS.
Após a validação, o script identifica automaticamente todas as interfaces físicas de rede ativas. Para cada interface encontrada, configura os servidores DNS informados. Caso solicitado pelo administrador, também desativa o protocolo IPv6 na interface e aplica sua desativação global por meio do Registro do Windows.
Na sequência, o cache DNS é limpo e são executados testes para validar a comunicação com o Active Directory:
- Resolução do registro A do domínio.
- Resolução dos registros SRV do serviço LDAP (_ldap._tcp.dc._msdcs).
Essas verificações garantem que a estação consiga localizar corretamente um Controlador de Domínio antes de tentar ingressar no ambiente.
Após a validação da infraestrutura DNS, o script solicita as credenciais de um usuário com permissão para adicionar computadores ao domínio.
Se o nome atual da máquina for diferente do informado, o computador é renomeado automaticamente. Em seguida, é executado o ingresso no domínio utilizando a criação automática da conta do computador no Active Directory.
Como etapa final, o script força um novo registro DNS da estação, aguarda 10 segundos e reinicia o computador para concluir o processo.
Benefícios
- Automatiza todo o processo de ingresso no Active Directory.
- Reduz erros de configuração manual.
- Configura automaticamente os servidores DNS.
- Valida previamente a infraestrutura DNS e LDAP.
- Permite renomear a estação durante o ingresso.
- Possui opção para desativação do IPv6.
- Compatível com execução local ou via compartilhamento de rede (SMB).
- Reinicia automaticamente o equipamento para finalizar a operação.
Download
Baixar o script powershell (.ps1)
https://raw.githubusercontent.com/projetoroot/Scripts-de-update/refs/heads/main/ingressar-ad-auto.ps1