Как узнать, кто и когда создал пользователя в Active Directory?

В этой статье мы рассмотрим: как узнать дату создания пользователя в Active Directory; как с помощью PowerShell получить из журнала событий контроллера домена информацию о том, кто создал аккаунт пользователя и время последнего входа пользователя в домен. Такие задачи часто возникают при аудите учетных записей пользователей в Active Directory, поиске и удалении неиспользуемых объектов , или сборе статистики.

Как узнать дату создания пользователя в Active Directory?

Вы можете получить дату созданию любого объекта Active Directory (пользователя, компьютера или группы) через графическую консоль ADUC (не забудьте включить опцию Advanced Features в меню View).

  1. Найдите нужного пользователя в дереве AD вручную или с помощью поиска ;
  2. Откройте свойства пользователя и перейдите на вкладку Object ;
  3. Дата создания объекта в Active Directory указана в поле Created . консоль ADUC дата создания объекта в Active Directory

Это же значение можно получить из встроенного редактора атрибутов AD (атрибут whenCreated).

атрибут whencreated у объектов AD

Чтобы получить дату создания аккаунта пользователя через PowerShell, воспользуйтесь командлетом Get-ADUser из модуля AD PowerShell :

Get-ADUser a.novak –properties name,whencreated|select name,whencreated

Get-ADUser PowerShell - когда был создан пользователь в active directory - атрибут whencreated

Информацию о последней активности (входе) пользователя в домен можно получить из атрибутов атрибутов lastLogon или lastLogonTimpestamp . Историю входа пользователей в домен по логам DC можно получить так .

Получить список пользователей, недавно созданных в 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:psnew_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 за последние 24 часа

Как узнать, кто создал пользователя в 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.

событие 4720 от User Account Management - A user account was created Скрипт для выгрузки всех событий создания аккаунтов из журнала контроллера домена за последние 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

кто создал аккаунт пользователя в домене Active Directory

На выходе у нас получился объект $Report, содержащий информацию о том, кто создал пользователя, когда создал и на каком DC.

Можно экспортировать содержимое отчета в CSV файл:

$filename = Get-Date -Format yyyy.MM.dd
$exportcsv=”c:psad_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
}
}

Вы можете писать информацию о найденных событиях не в локальный текстовый файл на каждом DC, а в базу данных. Например, можно записывать данные в MySQL через MySQL .NET Connector для PowerShell или в Microsoft SQL Server. Пример описан в статье про аудит удаления файлов и папок из сетевого каталога в Windows .

Для получения информации о дате создания пользователя в Azure AD через PowerShell можно использовать такой метод.

EnglishRussianUkrainian