Active Directory on Steroids: Hromadné resety hesel podle CSV
Říká ti něco situace: „Zítra nastupuje 50 brigádníků, každý musí mít účet a heslo, ať se nezblázní helpdesk.“? Nebo „Insider leak – resetuj hesla všem ve výrobě hned!“? Klikat v ADUC je peklo. PowerShell se skriptem Set‑ADAccountPassword to zvládne během kávy. Pojďme na to – CSV, silná hesla, auditní log, distribuce e‑mail/SMS a žádné zablokované účty.
1 · Kdy hromadný reset dává smysl
- Hromadný onboarding (brigádníci, sezónní pracovníci).
- Incident response – podezření na kompromitaci hesel.
- Pravidelná rotace hesel (SOX, ISO 27001).
- Merge & Acquisition: sjednocení politik mezi doménami.
2 · Formát CSV pro vstup
„`csv SamAccountName,Email,Phone,OU jnovak,j.novak@firma.cz,+420777123456,OU=People,DC=firma,DC=cz kmala,karla.mala@firma.cz,,OU=Contractors,DC=firma,DC=cz
POZOR: Název sloupce SamAccountName je povinný, ostatní dobrovolné (pro notifikace a přesun v OU).
3 · Generátor silných hesel
function New‑StrongPassword {
param([int]$Length = 14)
Add‑Type -AssemblyName System.Web
do {
$pw = [System.Web.Security.Membership]::GeneratePassword($Length,3)
} until ($pw -match '[A-Z]' -and $pw -match '[a-z]' -and $pw -match '\d' -and $pw -match '\W')
$pw
}
Splňuje komplexitu AD + FIPS (pokud délka ≥ 14 znaků).
4 · Skript Invoke‑MassPwReset.ps1
param(
[string]$Csv = "C:\Data\users.csv",
[string]$Log = "C:\Logs\PwReset_$(Get-Date -F yyyyMMdd_HHmm).csv",
[switch]$MoveOU,
[switch]$ReportOnly
)
Import-Module ActiveDirectory
$list = Import-Csv $Csv
$result = @()
foreach ($u in $list) {
$pwd = New-StrongPassword
if (!$ReportOnly) {
try {
Set-ADAccountPassword -Identity $u.SamAccountName -Reset -NewPassword (ConvertTo-SecureString $pwd -AsPlainText -Force)
Set-ADUser $u.SamAccountName -ChangePasswordAtLogon $true
if ($MoveOU -and $u.OU) { Move-ADObject (Get-ADUser $u.SamAccountName).DistinguishedName -TargetPath $u.OU }
$state = 'OK'
} catch {
$state = $_.Exception.Message
}
} else { $state = 'REPORT' }
$result += [pscustomobject]@{
User = $u.SamAccountName
Email = $u.Email
Phone = $u.Phone
Password = $pwd
Status = $state
}
}
$result | Export-Csv $Log -NoTypeInformation -Encoding UTF8
5 · Rozeslání hesel e‑mailem / SMS
$smtp = 'smtp.firma.cz'
foreach ($r in $result) {
if ($r.Email) {
$body = "Ahoj $($r.User),\nTvé nové heslo: $($r.Password)\nZměň si ho při prvním přihlášení."
Send-MailMessage -To $r.Email -From it@firma.cz -Subject 'Nové heslo' -Body $body -SmtpServer $smtp -UseSsl
}
if ($r.Phone) {
Send‑Sms -To $r.Phone -Msg "Nove heslo: $($r.Password)" # vlastní wrapper na Twilio/GOIP
}
}
E‑maily posílej TLS, u SMS neukládej heslo do history.
6 · Prevence lockoutů & časové okno
- Zablokuj GPO cached credentials → Interactive logon: Number of previous logons = 0.
- Změň hesla mimo špičku (Scheduled Task, noc).
- Informuj helpdesk – budou volat.
7 · Audit do SIEM a reverzní dohledatelnost
- AD Audit Policy: Directory Service Changes → event ID 4724 (password reset).
- Forward do SIEM (Splunk/ELK).
- Skript loguje CSV (uživatel, nová hash? NIKDY – heslo jen PlainText v chráněném sdíleném úložišti → po 72 h smaž).
8 · Rollback: když se reset pokazí
- CSV log = reference → vygeneruj nové heslo pro konkrétní účty.
Set-ADAccountPassword -Identity user -NewPassword (ConvertTo‑SecureString $old -AsPlainText -Force)- Audit trail stále existuje (event ID 4724).
9 · Case study: 320 hesel za 90 s
| Parametr | Před (ručně) | Se skriptem | Rozdíl |
|---|---|---|---|
| Prům. čas/heslo | 45 s | 0,28 s | ‑99,4 % |
| Chyby (záměna O ↔ 0) | ~5 % | 0 % | ‑100 % |
| Uživ. dotazy „Kde je heslo?“ | 40 | 3 | ‑92 % |
10 · FAQ
- Mohu použít vlastní generátor hesel?
- Jasně, funkci
New‑StrongPasswordnahraď svým algem či hashicorp/random. - Co Azure AD?
- Azure AD Graph podporuje
Set‑AzureADUserPassword; podobný princip, ale potřebuje Graph API beta permissions. - Neporušuji GDPR rozesíláním hesel e‑mailem?
- Použij bezpečné kanály: link na OneTime Secret, šifrovaný PDF, SMS mimo PII.
11 · Závěr
Zapomeň na klikání a copy‑paste hesel v Notepadu. PowerShell ti dá turbo rychlost, auditní stopu a bezpečnost zároveň. Ať už onboarding 50 brigádníků nebo reakce na incident – hromadný reset hesel je teď otázkou minut, ne dnů.
Klíčová slova
active directory, mass password reset, powershell ad, set‑adaccountpassword, csv bulk import, secure random password, helpdesk automation, compliance audit
„`




