Используя групповые политики Active Directory можно настроить аудит смены паролей и других действий связанные с пользователями. Эти события можно получить используя оснастку Event Viewer и Powershell.
Что бы получить события начинающиеся с определенной даты:
Function Get-ADPasswordEvent { [CmdletBinding()] Param( # массив с идентификаторами для проверки событий [array]$EventID = @(4723,4724,4740,4767), # поиск логов от указанной даты [datetime]$BeginTime, # тип события, которые мы ищем Удача/Провал [ValidateSet("Success","Failure")] [array]$EventType, # IP/DNS имя удаленного компьютера [string]$ComputerName ) Process { # составляем массив для поиска $log_table = @{ LogName='Security'; ProviderName='Microsoft-Windows-Security-Auditing'; ID=$EventID; } # ниже проверяем какие параметры переданы пользователем # и добавляем их в массив # пользователь указал дату if ($BeginTime){ $log_table += @{StartTime=$BeginTime} } # пользователю нужен только успех/провал if ($EventType -eq 'Success'){ $log_table += @{Keywords=9007199254740992} } elseif ($EventType -eq 'Failure') { $log_table += @{Keywords=4503599627370496} } $parameters = @{ FilterHashtable=$log_table } # если пользователь указал удаленный компьютер if ($ComputerName){ $parameters += @{ComputerName=$ComputerName} } # передаем все параметры в команду $events = Get-WinEvent @parameters # массив, который вернем пользователю # со всеми событиями $formatted_events = @() foreach ($event in $events){ # проверяем каждое событие # и устанавливаем для него свое описание Switch ($event.ID) { 4723 { $Description = "Попытка изменения пароля" Break } 4724 { $Description = "Попытка сброса пароля" Break } 4740 { $Description = "Пользователь заблокирован" Break } 4767 { $Description = "Пользователь разблокирован" Break } Default { # если его идентификатор не найден $Description = $event.Message Break } } # определяем тип события if ($event.KeywordsDisplayNames -like '*Success*'){$type = 'Успех'} else {$type = 'Провал'} # создаем массив текущего события # и добавляем его к остальным найденным $formatted_events += [PSCustomObject]@{ "Дата создания" = (Get-Date $event.TimeCreated -Format "dd-MM-yyyy HH:mm"); "ID" = $event.ID; "Описание" = $Description; "Тип" = $type; "Цель (имя)" = $event.Properties[0].Value; "Цель (компьютер)" = $event.Properties[1].Value; "Кем (имя)" = $event.Properties[4].Value; "Кем (компьютер)" = $event.Properties[5].Value; "Цель (SID)" = $event.Properties[2].Value; "Кем (SID)" = $event.Properties[3].Value; } } # возвращаем составленный массив пользователю return $formatted_events | ft } }
Источник: здесь
Комментариев нет:
Отправить комментарий