В этой статье мы рассмотрим: как узнать дату создания пользователя в Active Directory; как с помощью PowerShell получить из журнала событий контроллера домена информацию о том, кто создал аккаунт пользователя и время последнего входа пользователя в домен. Такие задачи часто возникают при аудите учетных записей пользователей в Active Directory, поиске и удалении неиспользуемых объектов, или сборе статистики.
Как узнать дату создания пользователя в Active Directory?
Вы можете получить дату созданию любого объекта Active Directory (пользователя, компьютера или группы) через графическую консоль ADUC (не забудьте включить опцию Advanced Features в меню View).
- Найдите нужного пользователя в дереве AD вручную или с помощью поиска;
- Откройте свойства пользователя и перейдите на вкладку Object;
- Дата создания объекта в Active Directory указана в поле Created.
Это же значение можно получить из встроенного редактора атрибутов AD (атрибут whenCreated).
Чтобы получить дату создания аккаунта пользователя через PowerShell, воспользуйтесь командлетом Get-ADUser из модуля AD PowerShell:
Get-ADUser a.novak –properties name,whencreated|select name,whencreated
Получить список пользователей, недавно созданных в Active Directory с помощью PowerShell
С помощью простого PowerShell скрипта вы можете вывести список пользователей, созданных недавно в Active Directory. Для этого нужно с помощью командлета Get-ADUser выбрать всех пользователей и отфильтровать их по значению атрибута whencreated. Например, следующий PowerShell код выведет пользователей, созданных в Active Directory за последние 24 часа:
$lastday = ((Get-Date).AddDays(-1))
$filename = Get-Date -Format yyyy.MM.dd
$exportcsv=”c:\ps\new_ad_users_” + $filename + “.csv”
Get-ADUser -filter {(whencreated -ge $lastday)} –properties whencreated | Select-Object Name, UserPrincipalName, SamAccountName, whencreated | Export-csv -path $exportcsv
В этом примере список учетных записей AD сохраняется в CSV файл с текущей датой в качестве имени. С помощью планировщика Windows вы можете настроить ежедневный запуска такого скрипта. В результате в указанном каталоге будут накапливаться файлы, содержащие информацию о дате создания новых учетных записей. В отчет можно добавить любые другие атрибуты пользователя из Active Directory (см. статью об использовании Get-ADUser).
Как узнать, кто создал пользователя в Active Directory?
Если в вашем домене Active Directory несколько администраторов, или вы делегировали в AD права на создание и редактирование учетных записей пользователей другим сотрудникам (например, отделу кадров), вам может понадобится информация о том, что именно создал в Active Directory определенный аккаунт пользователя. Эту информацию можно получить из журналов безопасности контроллеров домена Active Directory.
Когда вы создаете нового пользователя в домене, в журнале безопасности контроллера домена (только того DC, на котором создавалась учетная запись) появляется событие с кодом EvenId 4720 от источника User Account Management (на DC должна быть включена политика аудита Audit account management в политике Default Domain Controller Policy).
В описании этого события содержится строка A user account was created. В поле Subject указана учетная запись, под которой была создана новая учетка пользователя AD (выделена на скриншоте ниже). Имя нового пользователя указано в поле New Account.
Скрипт для выгрузки всех событий создания аккаунтов из журнала контроллера домена за последние 24 часа может выглядеть следующим образом:
$Report = @()
$time = (get-date) - (new-timespan -hour 24)
Get-WinEvent -FilterHashtable @{LogName="Security";ID=4720;StartTime=$Time}| Foreach {
$event = [xml]$_.ToXml()
if($event)
{
$Time = Get-Date $_.TimeCreated -UFormat "%Y-%m-%d %H:%M:%S"
$CreatorUser = $event.Event.EventData.Data[4]."#text"
$NewUser = $event.Event.EventData.Data[0]."#text"
$objReport = [PSCustomObject]@{
User = $NewUser
Creator = $CreatorUser
DC = $event.Event.System.computer
CreationDate = $Time
}
}
$Report += $objReport
}
$Report
На выходе у нас получился объект $Report, содержащий информацию о том, кто создал пользователя, когда создал и на каком DC.
Можно экспортировать содержимое отчета в CSV файл:
$filename = Get-Date -Format yyyy.MM.dd
$exportcsv=”c:\ps\ad_users_creators” + $filename + “.csv”
$Report | Export-Csv $exportcsv -append -NoTypeInformation -Delimiter ","
Но чаще всего приходится проверять журналы события на всех контроллерах домена. Список всех DC можно получить с помощью командлета Get-ADDomainController. Затем останется проверить на каждом из них событие 4720 и создать результирующий отчет:
$Report = @()
$time = (get-date) - (new-timespan -hour 24)
$AllDCs = Get-ADDomainController -Filter *
ForEach($DC in $AllDCs)
{
Get-WinEvent -ComputerName $dc.Name -FilterHashtable @{LogName="Security";ID=4720;StartTime=$Time}| Foreach {
$event = [xml]$_.ToXml()
if($event)
{
$Time = Get-Date $_.TimeCreated -UFormat "%Y-%m-%d %H:%M:%S"
$CreatorUser = $event.Event.EventData.Data[4]."#text"
$NewUser = $event.Event.EventData.Data[0]."#text"
$objReport = [PSCustomObject]@{
User = $NewUser
Creator = $CreatorUser
DC = $event.Event.System.computer
CreationDate = $Time
}
}
$Report += $objReport
}
}
Для получения информации о дате создания пользователя в Azure AD через PowerShell можно использовать такой метод.