Вопрос или проблема
Мне нужно экспортировать таблицу с именами пользователей (samAcountNames) вместе с их последней датой/временем входа на определенный сервер в сети (который является членом домена).
Согласно поиску в Google, я могу сделать это только как последнюю дату/время входа с контроллера домена или с конкретного сервера, но без имени пользователя или только с последней датой/временем входа пользователя.
На самом деле, я нашел сценарий, который использует Журнал событий безопасности и должен запускаться на целевом сервере, но я не могу избавиться от дубликатов, которые он создает:
UserName : admin_le
LoginTime : 17.02.2015 15:36:04
UserName : admin_le
LoginTime : 17.02.2015 15:36:04
UserName : admin_le
LoginTime : 17.02.2015 15:36:04
UserName : admin_le
LoginTime : 17.02.2015 15:36:00
UserName : admin_le
LoginTime : 17.02.2015 15:36:00
UserName : admin_le
LoginTime : 17.02.2015 15:36:00
UserName : admin_le
LoginTime : 17.02.2015 15:36:00
Сам сценарий:
$Date = [DateTime]::Now.AddDays(-14)
$Date.tostring("MM-dd-yyyy"), $env:Computername
$eventList = @()
Get-EventLog "Security" -After $Date `
| Where -FilterScript {$_.EventID -eq 4624 -and $_.ReplacementStrings[4].Length -gt 10 -and $_.ReplacementStrings[5] -notlike "*$"} `
| foreach-Object {
$row = "" | Select UserName, LoginTime
$row.UserName = $_.ReplacementStrings[5]
$row.LoginTime = $_.TimeGenerated
$eventList += $row
}
$eventList > c:\export.log
Спасибо.
Передайте $eventList на sort -Property LoginTime -Unique
.
Ответ или решение
Для того чтобы получить дату последнего входа пользователей на специфическом сервере в доменной сети, необходимо учитывать множество факторов, таких как конфигурация сервера, настройки безопасности и доступные инструменты. В данной статье мы разберем несколько методов получения этой информации, а также предложим решение для устранения дубликатов в полученных данных.
Способы получения даты последнего входа
-
Метод через события безопасности (Security Event Log):
Это наиболее распространенный способ получения информации о входах пользователей. С помощью PowerShell можно отфильтровать события с определенными идентификаторами событий (например, 4624 – успешный вход) и собрать необходимые детали. -
Командлет
Get-ADUser
:
Если ваш сервер является членом домена, вы также можете использовать командлетGet-ADUser
для получения атрибутов пользователей, включая дату последнего входа. Однако, это будет применимо только для получения информации из контроллера домена.
Корректировка вашего скрипта
Ваш скрипт, который использует события безопасности для извлечения информации о пользователях, может быть улучшен для устранения дублированной информации. Для этого можно воспользоваться командлетом Sort-Object
и параметром -Unique
.
Вот исправленный пример вашего скрипта:
$Date = [DateTime]::Now.AddDays(-14)
$eventList = @()
Get-EventLog "Security" -After $Date |
Where-Object {
$_.EventID -eq 4624 -and
$_.ReplacementStrings[4].Length -gt 10 -and
$_.ReplacementStrings[5] -notlike "*$"
} | ForEach-Object {
$row = "" | Select UserName, LoginTime
$row.UserName = $_.ReplacementStrings[5]
$row.LoginTime = $_.TimeGenerated
$eventList += $row
}
# Удаляем дубликаты
$uniqueEventList = $eventList | Sort-Object -Property UserName, LoginTime -Unique
# Экспорт в файл
$uniqueEventList | Export-Csv -Path "c:\export.csv" -NoTypeInformation
Пояснения к коду:
- Get-EventLog: Получает события из журнала безопасности, которые произошли за последние 14 дней.
- Where-Object: Фильтрует только события с ID 4624, которые соответствуют входу пользователей.
- ForEach-Object: Проходит по каждому событию и извлекает имя пользователя и время входа.
- Sort-Object -Unique: Удаляет дубликаты, оставляя только уникальные записи на основе имени пользователя и времени входа.
- Export-Csv: Экспортирует результаты в CSV файл, что делает дальнейшую обработку данных более удобной.
Заключение
Используя предложенный подход, вы сможете эффективно получить и экспортировать информацию о последнем входе пользователей на специфическом сервере в вашей доменной сети. Регулярные проверки и актуализация используемых скриптов помогут поддерживать высокую безопасность и мониторинг уязвимостей в вашей инфраструктуре.