SC AD Hygiene
Анализ и очистка Active Directory
- AD
- Диагностика
- Отчёты
Загружаем интерфейс…
SC LoginTrace помогает ответить на вопрос «кто и откуда блокирует учётную запись». Конструктор собирает запрос к журналу безопасности контроллеров домена по событиям 4740, 4625 и 4771 для нужного пользователя и периода.
Блокировки, неудачные входы и ошибки предварительной проверки Kerberos.
Запрос выполняется по каждому DC — источник блокировки не потеряется.
В отчёте указано, с какой машины пришёл запрос.
Отчёт для заявки и для пользователя, который «ничего не делал».
Блокировку фиксирует контроллер с ролью PDC-эмулятора, поэтому скрипт опрашивает его первым.
Анализ и очистка Active Directory
Оргструктура из поля Manager в AD
Шаблоны заявок и SLA для Service Desk
#Requires -Modules ActiveDirectory
# SC LoginTrace — источник блокировок и неудачных входов.
# https://shmonovstudio.ru/tools/sc-logintrace
$User = 'username'
$Controllers = (Get-ADDomainController -Filter *).HostName
$XPath = "*[System[(EventID=4625 or EventID=4740 or EventID=4771) and TimeCreated[timediff(@SystemTime) <= 86400000]]] and *[EventData[Data[@Name='TargetUserName']='$User']]"
$Rows = foreach ($DC in $Controllers) {
try {
Get-WinEvent -ComputerName $DC -LogName Security -FilterXPath $XPath -ErrorAction Stop | ForEach-Object {
$Data = @{}
([xml]$_.ToXml()).Event.EventData.Data | ForEach-Object { $Data[$_.Name] = $_."#text" }
[pscustomobject]@{
Time = $_.TimeCreated
Controller = $DC
LoginEventId = $_.Id
# 4740 хранит имя компьютера-источника в поле TargetDomainName
Source = if ($_.Id -eq 4740) { $Data.TargetDomainName } elseif ($Data.WorkstationName -and $Data.WorkstationName -ne "-") { $Data.WorkstationName } else { $Data.IpAddress }
IpAddress = $Data.IpAddress
Status = if ($Data.Status) { $Data.Status } else { $Data.FailureReason }
}
}
} catch {
if ($_.FullyQualifiedErrorId -notlike "NoMatchingEventsFound*") { Write-Warning "$DC : $($_.Exception.Message)" }
}
}
$Path = Join-Path 'C:\Reports' ("logintrace-$User-" + (Get-Date -Format 'yyyy-MM-dd-HHmm') + ".csv")
$Rows | Sort-Object Time -Descending | Export-Csv $Path -NoTypeInformation -Encoding UTF8
$Rows | Group-Object Source | Sort-Object Count -Descending | Select-Object Count, Name | Format-Table -AutoSize
Write-Host "Событий: $(@($Rows).Count). Отчёт: $Path"XPath-запрос к журналу чувствителен к регистру: указывайте логин так, как он записан в AD. Для чтения журнала Security нужны права группы Event Log Readers или администратора домена.