Не решено Дата последнего использования УЗ в AD. При входе на шару не обновляет lastlogon.

lurker

Почетный гость
Задача стоит найти УЗ, которые давно не использовались.
Начал я с того, что просмотрел lastlogon\lastlogondate\lastlogontimestamp на каждом DC. Оказалось что есть явно используемые УЗ у которых lastlogon* был 5 лет назад.
Стал копать, оказалось что при заходе на доменную файловую шару с доменной уз с недоменного компьютера, аутентификация идёт через kerberos (смотрел через wireshark), но при этом не возникает ни событи 4624 ни какого либо другого события связанного с логинящейся уз на DC(на файловом сервере логи доступа в сетевую папку есть) пароль при входе на шару запрашивается. Другие логи kerberos на том DC есть.
Подскажите куда копать?
 
Get-ADUser -Identity Toms -Properties LastLogon | Select Name, @{Name='LastLogon';Expression={[DateTime]::FromFileTime($_.LastLogon)}}
 
Get-ADUser -Identity Toms -Properties LastLogon | Select Name, @{Name='LastLogon';Expression={[DateTime]::FromFileTime($_.LastLogon)}}
Этот способ не работает у вас 2 ошибки
1)вы берёте данные с рандомного DC. Не факт что логинсятся на нём.
2)прочитайте пожалуйста в чём состоит моя проблема. Я даже в заглавии темы написал "При входе на шару не обновляет lastlogon"
 
Если что то первый пункт я уже решил. Есть скрипт для опроса всех DC поочерёдно и выбора последней даты логина. Проблема во втором пункте.
 
Можете скриптом поделиться ? Вдруг кому пригодится🙄
 
Можете скриптом поделиться ? Вдруг кому пригодится
$DateAddDays=-3*365 #насколько давно не используемые уз искать. значение в днях
$date=((get-date).adddays($DateAddDays))
$hashlist=@{}
$UsersApproved=[System.Collections.ArrayList]@()
$adcontrollers=Get-ADDomainController -Filter *
Foreach ($controller in $adcontrollers.hostname){
$controller
$users=Get-ADuser -server $controller -Filter * -Properties LastLogon, whenCreated, Description, manager, ObjectGUID | where {$_.whenCreated -le $date -and $_.Enabled -eq 'True'} | Select-Object Name, LastLogon, whenCreated, ObjectGUID, Description, manager |Sort-Object -Property {$_.Name}
$users | Add-Member -NotePropertyName DC -NotePropertyValue ($controller)
$hashlisttemp=@{}
Foreach ($user in $users){# переводим массив в хеш-таблицу
$user.lastlogon=[datetime]::FromFileTime($user.lastlogon)
$hashlisttemp.($user.ObjectGUID)=($user)
}
$hashlisttemp.values.lastlogon
if ([boolean]$hashlist.count){#Таблица уже есть?
foreach ($user in $hashlisttemp.values){
if ($user.LastLogon -gt $hashlist.($user.ObjectGUID).LastLogon){
$hashlist.($user.ObjectGUID)=$user
}
}
} else{
$hashlist=$hashlisttemp
}
}
$hashlist.values | Export-Csv "Y:\powershell\UserAccountCheck\rawdata.csv" -UseCulture -Encoding UTF8 -NoTypeInformation


$parsedbylastlogon=[System.Collections.ArrayList]@()
foreach ($i in $hashlist.values){
if ($i.LastLogon -lt $date){
$parsedbylastlogon+=$i
}
}
$parsedbylastlogon | Export-Csv "y:\powershell\UserAccountCheck\parsedbylastlogon.csv" -UseCulture -Encoding UTF8 -NoTypeInformation


#Смотрим актуальных апрувнутых пользователей
$UsersApproved = Import-Csv -Path "Y:\powershell\UserAccountCheck\UserNoLogonApproved.csv" -UseCulture -Encoding UTF8
$UsersApprovedparsed=[System.Collections.ArrayList]@()
foreach ($i in $UsersApproved)
{
$i.approved=[datetime]::parseExact($i.approved, 'dd.MM.yyyy', $null)
if ($i.approved -gt $date)
{
$UsersApprovedparsed+=$i
}
}
$UsersApprovedparsed | Export-Csv "Y:\powershell\UserAccountCheck\UsersApprovedparsed.csv" -UseCulture -Encoding UTF8 -NoTypeInformation


$result=[System.Collections.ArrayList]@()
foreach ($i in $parsedbylastlogon)
{
if (-not ($i.ObjectGUID -in $UsersApprovedparsed.ObjectGUID))
{
if ($i.manager -ne $null){#Если поле manager не пустое, то обрезаем его до ФИО
$i.manager=$i.manager.ToString()
$pointer=$i.manager.indexof(",OU=")
if ($pointer -gt 3){
$i.manager=$i.manager.substring(3,$pointer-3)
}
}
$result+=$i
}
}
$result | Export-Csv "Y:\powershell\UserAccountCheck\result.csv" -UseCulture -Encoding UTF8 -NoTypeInformation
Если вкратце получает список DC, с каждого контроллера тянет данные о давно не используемых уз, выбирает самый поздний lastlogon.
Потом выкидывает апрувнутых пользователей (ну например человек в декрете, потому давно не логинится) загруженных из того-же csv файла
итоговый и промежуточные результаты выводит в csv для упрошения дебага и обработки результата

может аудит доступа должен быть включен ?
1)если нормально логиниться в комп, то события возникают и lastlogon обновляется.
2)Везде где я нашёл аудит включен. Да, может быть я чего не нашёл, но тут уж только на вас надеюсь, я обыскал всё что мог.
 
по моему он и не должен обновляться
тогда
1)Как найти уз которые давно не использовались?
2)что такое logon в терминах винды?В каких точно ситуациях возникает 4624? Я не нашёл официальной информации, на другом форуме мне сказали что это прохождение аутентификации. При входе на шару аутентификация есть. Почему события нет?
 
Назад
Верх Низ