Форум программистов, компьютерный форум, киберфорум
Администрирование Windows
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.68/120: Рейтинг темы: голосов - 120, средняя оценка - 4.68
 Аватар для Джуниор
88 / 67 / 8
Регистрация: 29.09.2009
Сообщений: 427

История входа пользователей в ОС

07.10.2018, 20:56. Показов 25083. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, необходимо вывести журнал авторизации пользователей в системе Windows server ( Аудит включен)

Журнал нужен примерно следующий виде.

Дата, тип события( вход/выход) ,Имя пользователя.

Журнал необходим, чтоб отследить пользователей входивших (выходивших) в систему за определенный период.

Системный журнал в обычном режиме показывает лишь события успешного / не успешного входа в систему, но как вывести рядом пользователя сгенерировавшего данное событие не ясно.

Варианты решения:
  • Готовое ПО для анализа авторизации пользователей
  • Какой нибудь хитрый скприт
  • Тонкая настройка фильтров журнала событий
Кто что успешно практиковал и может поделиться решением?
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
07.10.2018, 20:56
Ответы с готовыми решениями:

Время входа пользователей
Здравствуйте! Есть WS 2008 x32, помогите создать запрос. Требуется сделать выгрузку в excel Подобного формата Пользователь: Время...

Сценарий входа для пользователей
Доброго времени суток, столкнулся с такой проблемой: нужно раскинуть по компам в сети рдп файлы на рабочий стол пользователям, для этого...

Мониторинг входа/выхода пользователей
Нужно написать скрипт,который записывал бы время,дату и имя компьютера в txt файл,сразу же после выполнения входа в ОС.

6
 Аватар для KDE777
1886 / 1108 / 428
Регистрация: 22.01.2016
Сообщений: 3,050
11.10.2018, 19:18
Цитата Сообщение от Джуниор Посмотреть сообщение
необходимо вывести журнал авторизации пользователей в системе Windows server ( Аудит включен)
Цитата Сообщение от Джуниор Посмотреть сообщение
Какой нибудь хитрый скприт
PowerShell вам в помощь:

PowerShell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
Get-WinEvent -ComputerName 'localhost' -FilterHashtable @{
    logname = "Security";
    StartTime = (Date).AddDays(-1);
    ID = 4624,4634;
} | %{
    
    $event = $_
    
    $xmlEvent = [xml]$event.ToXml()
    $EventData = New-Object PSObject
    $xmlEvent.event.EventData.Data | % {$EventData | Add-Member NoteProperty $_.Name $_."#text"}
    
    if ($EventData.LogonType -eq 2)
    {
 
    New-Object PSObject -Property @{
        EventId =     $event.Id
        TimeCreated = $event.TimeCreated
        Task        = "$($event.TaskDisplayName)"
        Keywords    = "$($event.KeywordsDisplayNames)"
        User        = $EventData.TargetUserName
        }
 
    }
 
} | ft -a
0
 Аватар для Джуниор
88 / 67 / 8
Регистрация: 29.09.2009
Сообщений: 427
11.10.2018, 20:57  [ТС]
Цитата Сообщение от KDE777 Посмотреть сообщение
PowerShell вам в помощь:
Спасибо за ответ. Указанный Вами скрипт выводит в качестве результата сам свой текст. Возможно я что то делаю не так или в процессе копирования кода что то не так копируется.
Миниатюры
История входа пользователей в ОС  
0
 Аватар для Джуниор
88 / 67 / 8
Регистрация: 29.09.2009
Сообщений: 427
11.10.2018, 21:02  [ТС]
Я нашел решение, обратился к коллеге программисту. Мне помог следующий код:
PowerShell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
$time = [int64](New-TimeSpan (get-date "01/01/2017") (get-date "08/10/2018")).TotalMilliseconds
$filter = "*[System[TimeCreated[timediff(@SystemTime) < $time] and EventID=4624] and EventData[Data[@Name='LogonType']=10]]"
$results = @(
Get-WinEvent -FilterXPath $filter -LogName Security | Foreach {
$evt = $_
$addr = $evt.Properties[18].Value
$textcolor = $host.ui.rawui.foregroundcolor
$host.ui.rawui.foregroundcolor = "red"
 
if ($addr -like "192.168.0*") {$host.ui.rawui.foregroundcolor = "DarkGreen"}
if ($addr -like "10.*") {$host.ui.rawui.foregroundcolor = "yellow"}
"" | Select-Object @{n="Time";e={$evt.TimeCreated}},@{n="UserName";e={$evt.Properties[5].Value}},@{n="Address";e={$addr}}
$host.ui.rawui.foregroundcolor = $textcolor
}
)
$results | export-csv -Encoding UTF8 -Path d:\so1.csv -NoTypeInformation -Delimiter ";"
Выводит результат в файл d:\so1.csv очень удобно анализировать.

предварительно нужно разрешить исполнение пользовательских сценариев в повершел. Иначе скрипт не выполняется.
Подробно есть статья на хабре "PowerShell и аудит безопасности"
Миниатюры
История входа пользователей в ОС  
0
 Аватар для KDE777
1886 / 1108 / 428
Регистрация: 22.01.2016
Сообщений: 3,050
12.10.2018, 00:13
Лучший ответ Сообщение было отмечено Джуниор как решение

Решение

Цитата Сообщение от Джуниор Посмотреть сообщение
Указанный Вами скрипт выводит в качестве результата сам свой текст.
Это значит, что за прошедшие сутки таких событий не найдено.

Скрипт который вы запустили:

1. Ищет события за последние сутки от момента запуска - (Date).AddDays(-1). Можете поменять -1 на больший интервал.
2. Ищет события, у которых LogonType = 2, т.е. интерактивный вход/выход в систему. Подробности здесь.

Цитата Сообщение от Джуниор Посмотреть сообщение
Я нашел решение, обратился к коллеге программисту. Мне помог следующий код:
Этот код использует тот же Get-WinEvent из PowerShell, вот только выбирает он события о терминальном входе в систему (RemoteInteractive), о чём вы забыли уточнить в изначальном запросе + диапазон в вашем примере почти два года.

А вот учитывая, что вам необходимо выбирать события за очень длительный срок, выбор xml-фильтра, действительно более оправдан, т.к. Get-WinEvent с хеш-фильтром обрабатывает Security-журнал намного дольше (где-то даже есть об этом статья).

Однако, ваш код не выбирает события выхода и не показывает неудачные попытки. Если это добавить, получится примерно так:

PowerShell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
<#
Logon Type Description
 
2   Interactive (logon at keyboard and screen of system)
3   Network (i.e. connection to shared folder on this computer from elsewhere on network)
4   Batch (i.e. scheduled task)
5   Service (Service startup)
7   Unlock (i.e. unnattended workstation with password protected screen saver)
8   NetworkCleartext (Logon with credentials sent in the clear text. Most often indicates a logon to IIS with "basic authentication") See this article for more information.
9   NewCredentials such as with RunAs or mapping a network drive with alternate credentials.  This logon type does not seem to show up in any events.  If you want to track users attempting to logon with alternate credentials see 4648.  MS says "A caller cloned its current token and specified new credentials for outbound connections. The new logon session has the same local identity, but uses different credentials for other network connections."
10  RemoteInteractive (Terminal Services, Remote Desktop or Remote Assistance)
11  CachedInteractive (logon with cached domain credentials such as when logging on to a laptop when away from the network)
 
#>
 
$EndDate = date
$StartDate = $EndDate.AddDays(-365)
 
$LogonType = 10
$csvFile = 'c:\temp\report.csv'
$ComputerName = 'localhost'
 
 
$time = [int64](New-TimeSpan $StartDate $EndDate).TotalMilliseconds
$xmlFilter = "*[System[TimeCreated[timediff(@SystemTime) < $time] and (EventID=4624 or EventID=4634)] and EventData[Data[@Name='LogonType']=$LogonType]]"
 
Get-WinEvent -ComputerName $ComputerName -FilterXPath $xmlFilter -LogName Security | %{
    
    $event = $_
    
    $xmlEvent = [xml]$event.ToXml()
    $EventData = New-Object PSObject
    $xmlEvent.event.EventData.Data | % {$EventData | Add-Member NoteProperty $_.Name $_."#text"}
    
    [pscustomobject][ordered]@{
        EventId =     $event.Id
        DateCreated = $event.TimeCreated.ToShortDateString()
        TimeCreated = $event.TimeCreated.ToLongTimeString()
        Task        = "$($event.TaskDisplayName)"
        Keywords    = "$($event.KeywordsDisplayNames)"
        User        = $EventData.TargetUserName
        IP          = $EventData.IpAddress
        LogonType   = switch ($EventData.LogonType)
                      {
                        2  {'Interactive'}
                        3  {'Network'}
                        4  {'Batch'}
                        5  {'Service'}
                        7  {'Unlock'}
                        8  {'NetworkCleartext'}
                        9  {'NewCredentials'}
                        10 {'RemoteInteractive'}
                        11 {'CachedInteractive'}
                        Default {$EventData.LogonType}
                      }
 
    }
 
} | Export-Csv -Encoding UTF8 -Path $csvFile -NoTypeInformation -Delimiter ";"
 
cls
Import-Csv $csvFile -Delimiter ';' | ft -a
2
 Аватар для Джуниор
88 / 67 / 8
Регистрация: 29.09.2009
Сообщений: 427
12.10.2018, 09:58  [ТС]
Цитата Сообщение от KDE777 Посмотреть сообщение
вот только выбирает он события о терминальном входе в систему (RemoteInteractive), о чём вы забыли уточнить в изначальном запросе + диапазон в вашем примере почти два года.
Да забыл уточнить.

Интервал 2 года вбит от балды.
Сервер активно используется. Объем записей ограничен предельным размером файла журнала аудита. В итоге событий больше чем за 2 месяца не сохраняются( оно и не нужно пока).

Отдельно благодарю за улучшенный скрипт!!!
0
0 / 0 / 0
Регистрация: 11.06.2017
Сообщений: 10
04.05.2020, 06:49
Добрый день! Спустя полтора года, апну тему...
Ребятушки, помогите разобраться. Эта тема мне очень помогла (5), но теперь вопрос в том, как в PowerShell настроить сценарий по EventID 4647 (4647: Пользователь инициировал выход из системы.). Если говорить про 4634 - то время с точностью до секунды совпадает с 4624, то есть как я понимаю, как только сценарий авторизации пройден, начинается другой сценарий.
Цитата с https://docs.microsoft.com/
Основное различие между событием "4647: Пользователь инициировал выход из системы." и событием 4634 состоит в том, что событие 4647 создается при инициировании процедуры выхода определенной учетной записью с помощью функции выхода из системы, а событие 4634 показывает, что сеанс был завершен и больше не существует.
Пробуя выводить по 4647 - сценарий не выполняется, либо выводит пустые строки.

Спасибо.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
04.05.2020, 06:49
Помогаю со студенческими работами здесь

Запрет повторного входа пользователей
Всем , здравствуйте. Исходные данные: Проект на MVS 2015. Авторизация пользователей работает через SQL. Вопрос: ...

Скрипт входа пользователей на сайт
Всем привет! Народ надо какую-то инструкцию по созданию входа на страницу. Php не могу нормально настроить для входа на сайт. Как вообще...

Скрипт входа для пользователей домена
Доброго времени суток. Столкнулся с задачей на VBS: нужно написать скрипт который запускает программу в зависимости от принадлежности...

Еще раз про форму входа пользователей
Здравствуйте, Уважаемые форумчане! Вопрос формы входа пользователей - стар как мир. Но гугление не дает конкретных ответов. Суть...

Аудит входа пользователей в Windows XP Home Edition
Добрый день, Помогите решить проблему: необходимо чтобы Windows XP home вел журнал учета успешного/неуспешного входа пользователей в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru