Get-ADLockedAccounts — lista zablokowanych kont w domenie
🏢 Active Directory POWERSHELLPrzeszukuje całą domenę AD w poszukiwaniu zablokowanych kont — z możliwością masowego odblokowania
Opis
Raportuje wszystkie aktualnie zablokowane konta w AD. Wyświetla dla każdego konta: - DisplayName, SamAccountName, Department - Liczba złych prób logowania (BadLogonCount) - Czas ostatniej złej próby (LastBadPasswordAttempt) - Czy konto jest aktywne - Przynależność do OU Parametry: - -SearchBase 'OU=Users,DC=firma,DC=pl' — zawęź przeszukiwanie do OU - -Unlock — odblokuj wszystkie znalezione konta (wymaga potwierdzenia jeśli >5)
🕒 2026-04-13
📦 Źródło: own
skrypt.ps1
#Requires -Modules ActiveDirectory
<#
.SYNOPSIS
Listuje wszystkie aktualnie zablokowane konta AD i opcjonalnie je odblokowuje.
.DESCRIPTION
Przeszukuje cały AD w poszukiwaniu zablokowanych kont.
Wyświetla czas ostatniej złej próby i liczbę błędnych logowań.
Z parametrem -Unlock odblokowuje wszystkie znalezione konta (ostrożnie!).
.PARAMETER SearchBase
DN jednostki organizacyjnej do przeszukania (domyślnie: cała domena).
.PARAMETER Unlock
Przełącznik — jeśli podany, odblokowuje znalezione konta.
.EXAMPLE
.\Get-ADLockedAccounts.ps1
.\Get-ADLockedAccounts.ps1 -SearchBase "OU=Users,DC=firma,DC=pl"
.\Get-ADLockedAccounts.ps1 -Unlock
#>
param(
[string]$SearchBase = "",
[switch]$Unlock
)
Import-Module ActiveDirectory -ErrorAction Stop
$params = @{
Filter = { LockedOut -eq $true }
Properties = 'LockedOut', 'BadLogonCount', 'LastBadPasswordAttempt', 'BadPasswordTime',
'DisplayName', 'Department', 'Enabled', 'DistinguishedName'
}
if ($SearchBase) { $params.SearchBase = $SearchBase }
$locked = Get-ADUser @params | Sort-Object LastBadPasswordAttempt -Descending
if (-not $locked) {
Write-Host "`n[OK] Brak zablokowanych kont w AD." -ForegroundColor Green
return
}
Write-Host "`n Znaleziono $($locked.Count) zablokowanych kont:`n" -ForegroundColor Yellow
$locked | Select-Object DisplayName, SamAccountName, Department, BadLogonCount,
LastBadPasswordAttempt, Enabled,
@{N='OU'; E={ ($_.DistinguishedName -split ',OU=')[1] }} |
Format-Table -AutoSize
if ($Unlock) {
if ($locked.Count -gt 5) {
$confirm = Read-Host "Odblokować wszystkie $($locked.Count) kont? (tak/nie)"
if ($confirm -ne 'tak') { Write-Host "Anulowano."; return }
}
foreach ($acc in $locked) {
Unlock-ADAccount -Identity $acc.SamAccountName
Write-Host " [OK] Odblokowano: $($acc.SamAccountName)" -ForegroundColor Green
}
Write-Host "`nOdblokowano $($locked.Count) kont." -ForegroundColor Green
} else {
Write-Host "Użyj -Unlock aby odblokować wszystkie konta." -ForegroundColor Cyan
}