Версия 1.2 (сборки не учитываются, так как я уже сам в них запутался…)
Внимание! Программа использует файловую СУБД SQLite.
Немного об обновлениях:
- добавлен функционал поиска любых объектов в Active Directory;
- добавлен функционал включения и отключения учётных записей в Active Directory;
- добавлено контекстное меню, теперь можно помещать в буфер обмена не только имя пользователя, но и всю сопутствующую информацию;
- добавлен функционал проверки доступности удалённого хоста по заявленному IP адресу;
- добавлена интеграция с утилитой ADapter и выборки базы по имени хоста, IP адресу и имени пользователя;
- добавлен функционал резервного копирования базы данных;
- интегрирована утилита RDPShadow, с помощью которой можно осуществить теневое подключение к консольной сессии удалённого хоста;
- теперь из контекстного меню можно получить доступ к папке профиля пользователя.
Софтина-эпопея, к созданию которой привели эксперименты с идентификацией пользователей на конкретных хостах в домене. К этому функционалу я подбирался уже очень давно, но всё было как-то не до экспериментов. Уж слишком долго разбирался с реализацией системы фильтрации в связке Lazarus+SQLite. В итоге, конечно, всё закончилось хорошо, но теперь о сабже.
Изначально задумка была такова: нужна программа, которая могла бы хранить событие входа доменного пользователя на конкретный хост и собирать сопутствующие данные. К релизу текущей версии функционал немного сдвинулся в сторону сетевой инфраструктуры.
По сути, хотелось соотнести пользователей и машины для последующего учёта в ActiveDirectory. Софт также был бы незаменим для процесса высокоуровневой технической поддержки, но это уже частности.
Итак, UserHunter состоит из двух компонентов: UserHunterServer (uhserver.exe) и UserHunterViewer (uhviewer.exe). Для записи данных в базу используется UserHunterServer. Он собирает данные о дате и времени события входа, имени пользователя и компьютера, а также IP и MAC адреса* (большое спасибо коллеге за идею с IP и MAC).
UserHunterViewer — это наблюдательный пункт и основной исполняемый файл программы. Он отвечает за мониторинг базы данных. В нём можно проводить фильтрацию по параметрам, экспортировать выборку базы данных в CSV или вовсе её очистить и начать всё с нуля.
Главное окно UserHunterViewer выглядит (примерно*) вот так:
Все кнопки снабжены подсказками, а функционал программы максимально прост. Сортировка записей ведётся исключительно по мере заполнения базы данных и иных опций сортировки я даже не рассматривал. Для всего остального есть поиск и фильтрация данных. В один клик можно вывести данные за текущий день или месяц.
Поиск по месяцам ведётся по маске ГГГГ-ММ, по дням соответственно — ГГГГ-ММ-ДД.
На момент запуска программы данные в базе фильтруются по текущим суткам! Всё управление, включая обновление выдачи, проходит в ручном режиме.
UserHunter умеет обращаться к Active Directory и асинхронно получать данные о пользователях. Получение данных происходит с помощью отработки команды Get-ADUser в PowerShell. Обратите внимание, что для корректной работы этой функции в системе должен быть установлен RSAT.
Теперь расскажу о самом интересном — как установить и как пользоваться этой штукой.
Программа распространяется в виде uhviewer.exe и sqlite3.dll. Все остальные сопутствующие файлы можно развернуть из ресурсов программы с помощью первых двух клавиш на панели инструментов. Первая кнопка извлекает файл uhserver.exe, а вторая генерирует скрипты для запуска.
Важно! Программа и все её компоненты должны быть установлены в общедоступную папку с правом записи для пользователей домена. Только в этом случае гарантируется корректная работа программы и запись данных в базу.
Скрипты для запуска uhserver.exe — это файлы run.bat и activedir.ps1. Отдельно останавливаться на них не вижу смысла. После извлечения — можете полюбопытствовать сами. Кстати, мастер создания скриптов попросит указать путь к общей папке с установленной программой.
Далее необходимо создать объект групповой политики со сценарием входа пользователя в систему и указать сетевой путь до скрипта run.bat. Этот объект нужно будет связать с подразделением, в котором хранятся доменные записи компьютеров.

Само собой, запуск скрипта и вызов файла uhserver.exe будет незаметен для пользователя.
Кстати, UserHunterViewer поддерживает горячие клавиши. Например, Escape сбрасывает условия поиска, F5 — обновляет выборку, а F3 активирует поле поиска. Вызвать функцию поиска можно по клавише Enter. С помощью клавиши F2 можно вызвать функцию экспорта в CSV.
| Клавиша | Действие |
| F1 | О программе |
| F2 | Экспорт выборки в CSV |
| F3 | Активировать поле поиска |
| F5 | Обновить выборку |
| F6 | Выборка по текущей дате |
| F7 | Выборка по текущему месяцу |
| F8 | Открыть окно календаря для выбора дня |
| F9 | Запустить ADapter |
| F10 | Открыть окно поиска объектов AD |
| F11 | Выгрузить сервер |
| F12 | Открыть окно генерации скриптов |
| Escape | Сбросить все фильтры |
| Enter | Поиск |
Программа написана на Object Pascal в IDE Lazarus. В качестве СУБД использована SQLite.
В проекте использованы модули UniqueInstance и Synapse.
В программу интегрированы консольные утилиты RDPShadow и ADapter. Для работы этих программ нужна среда .Net Framework 4.5.2.
Скачать .Net Framework с этого сайта: 4.5.2 | 4.7.2 | 4.8.1.
Теперь ложка дёгтя…
Получение IP и MAC адресов происходит по принципу получения данных с первого сетевого адаптера. Если на удалённом хосте установлено несколько сетевых плат — выдача может быть, мягко говоря, не точной. Рекомендую опрашивать машины только с одной сетевой платой, а незадействованные адаптеры отключать.
