4

Кто на каких ПК залогинен в домене

Как системный администратор, я очень часто сталкиваюсь с тем, что мне нужно оперативно узнать имя ПК, на котором залогинен определенный пользователь. Очень выручает bginfo, которая отображает нужную информацию прямо на фоне рабочего стола у пользователя, и в рамках телефонного звонка в ИТ-службу пользователь может назвать имя своей машины. Иногда эта политика не отрабатывает как надо.

У нас на предприятии кто-то еще задолго до моего прихода в институт написал утилитку, которая в паре с групповой политикой, собирающей данные о входах пользователей, кое-как могла дать нужную инфу. Но увы, кривость этой софтины зашкаливает.

Я написал своё приложение, которое даёт мне информацию о дате входа пользователей и имени ПК.

1. Нужно  создать политику, которая при входах пользователей будет запускать скрипт, кладущий в общий файл лог о входе: имя пользователя, имя ПК, дата, время. Политику, теоретически, можно назначить в структуре домена повыше, рядом с Default Domain Policy

2. Правим конфиг, лежащий с каталоге с программой так, чтобы указать путь к лог-файлу, созданному в 1 пункте

3. Запускаем программу. При запуске она обращается к log-файлу, сортирует и группирует найденные данные так, чтобы в выпадающем списке показать несколько ПК напротив одного пользователя, если он логинился на несколько станций

Кто на каких ПК залогинен в домене Домен, Windows, Active Directory, Приложение, Gpo, Программа

Я с охотой делюсь софтинкой с любым желающим, подскажу как настроить и пользоваться:

https://drive.google.com/file/d/1PT8ZfhRKABIDSd5OC2q0h4diJI0...

UPD:

Не ожидал вообще никакой реакции на эту программу, поэтому наличие комментариев удивило.

1. Я не программист, я открыл Visual Studio первый раз в жизни, чтобы сварганить себе эту программку. СЕБЕ.

2. Меня самого дико бесит гигантский размер файла, но это следствие моего требования об автономности программы. Можно собрать ее в 10-мб файл, но тогда она будет клянчить дотнет и тд при установке, а именно этого я и хотел избежать

3. Я не зашивал туда вирусы, я не умею этого. Каспер мой не ругается, кстати.

_________________________________________________________

Последовав совету @apple.mary, сменил платформу разработки на .Net Framework 4.8.1, пересобрал проект. Теперь он 100 килобайт. Но требует установленный фрэймворк для работы!

https://drive.google.com/file/d/1WqPZhSoaqfMPN7fJFflFGiYOYC6...

Вы смотрите срез комментариев. Показать все
2
Автор поста оценил этот комментарий

написал своё приложение, которое даёт мне информацию о дате входа пользователей и имени ПК

Брр, на сервере в Powershell запускается Get-UalServerUser >>c:\logon.log а там хоть в том же powershell, хоть в вообще в cmd парсишь его до нужной кондиции.


Перечень команд приведён у MS: learn.microsoft.com/ru-ru/windows-server/administrati...


Get-UalOverview: предоставляет сведения, относящиеся к UAL, а также журнал установленных продуктов и ролей.

Get-UalServerUser: предоставляет данные о доступе пользователя клиента на локальный или целевой сервер.

Get-UalServerDevice: предоставляет данные о доступе устройства клиента на локальный или целевой сервер.

Get-UalUserAccess: предоставляет данные о доступе пользователя клиента к каждой роли или продукту, установленным на локальном или целевом сервере.

Get-UalDeviceAccess: предоставляет данные о доступе устройства клиента к каждой роли или продукту, установленным на локальном или целевом сервере.

Get-UalDailyUserAccess: предоставляет данные о доступе пользователя клиента за каждый день года.

Get-UalDailyDeviceAccess: предоставляет данные о доступе устройства клиента за каждый день года.

Get-UalDailyAccess: предоставляет данные о доступе клиентских устройств и пользователей за каждый день года.

Get-UalHyperV: предоставляет данные о виртуальной машине, относящиеся к локальному или целевому серверу.

Get-UalDns: предоставляет специальные данные DNS-клиента локального или целевого DNS-сервера.

Get-UalSystemId: предоставляет специальные системные данные для уникальной идентификации локального или целевого сервера.


Там даже примеры сложных запросов представлены и описания:

ActivityCount для каждого уникального клиента ограничено 65 535 в день. Вызов WMI из PowerShell также необходим только при запросе по дате.  Все остальные параметры командлета UAL могут использоваться в запросах PowerShell так, как это ожидается, как в следующем примере:

PS C:\Windows\system32> Get-UalDeviceAccess -IPAddress "10.36.206.112"


UAL сохраняет до двух лет истории. Чтобы разрешить получение данных UAL администратором при запуске службы, UAL создает копию активного файла базы данных current.mdb в файл с именем GUID.mdb каждые 24 часа для использования поставщика WMI.


То есть оно УЖЕ имеется в виде БД, и ты либо ту БД под свои нужды гонишь, либо командами делаешь выборку и на лету обрабатываешь результат отработки команды, либо как я в начале показал - результаты выборок в текстовый лог, а его уже можно спарсить по желанию.


И ещё дофига встроенного в ОС подобного добра, хотя бы дёргание их .evt файлов системных логов.

раскрыть ветку (13)
0
Автор поста оценил этот комментарий

Get-UalServerUser - круто, спасибо!

0
Автор поста оценил этот комментарий

Почему-то у меня все это добро отображает UserName, но на месте PSComputerName только пустота. И Get-UalServerUser отображает всех пользователей леса доменов, хотя мне кроме своего домена на остальные чихать.
В любом случае нет адекватного способа получить по имени пользователя ПК, на котором он прямо в данный момент имеет активный сеанс, и все способы сводятся к сбору и анализу статистики входов за прошлый период. Таким макаром мне проще собирать результаты команды quser (query ueser), чем, видимо, я и ограничусь. А то тут совсем уж странное предложение: батник из 4 строк, банально собирающий вывод переменных окружения, и подозрительная программа в 200 МБ, лишь выводящая полученный журнал в виде таблицы.

раскрыть ветку (3)
0
Автор поста оценил этот комментарий

"на месте PSComputerName только пустота"

А лог-файл наполнился, чтобы программе было что обрабатывать? Можно его фрагмент?

раскрыть ветку (2)
0
Автор поста оценил этот комментарий

Это вообще про другое, я про предложение об использовании PowerShell.

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

А, понял

0
Автор поста оценил этот комментарий

Коллеги предлагали шерстить логи АД, чтобы вытаскивать оттуда данные о входах юзеров, но это займёт очень много времени.


Про ПШ-команды я тоже знаю, но мне нужен графический интерфейс и запуск "здесь и сейчас", без долгих запросов к контроллерам домена

раскрыть ветку (7)
0
Автор поста оценил этот комментарий

На самом деле, powershell вполне себе ui может рисовать.

Мне лень было писать, просто тупо код твоей формы В Chatgpt загрузил и попросил в powershell сконвертировать

https://hastebin.com/share/latahehajo.php

Иллюстрация к комментарию
раскрыть ветку (6)
0
Автор поста оценил этот комментарий

Блин, круть какая! Не ожидал такого от ПШ

0
Автор поста оценил этот комментарий

мало опыта и некоторые моменты непонятны. это можно переименовать в PS и использовать?

попросил в powershell сконвертировать

раскрыть ветку (4)
0
Автор поста оценил этот комментарий

Да, сохранить в файл с расширением ps1 и работает

раскрыть ветку (3)
0
Автор поста оценил этот комментарий

язык схож с php. не думал что powershell так умеет. удивили.

а можете подправить скрипт, чтобы он типовой вывод "Get-UalServerUser >>c:\logon.log" обрабатывал?

я сам попробую повозиться, но с таким не связывался еще


доп вопрос: т.е. "Chatgpt загрузил и попросил в powershell сконвертировать" и это отработало по дефолту?

т.е. его можно попросить переделать, чтобы он отрабатывал лог другого вида?

а ля:


ActivityCount : 149344

ChassisSerialNumber : System Serial Number

FirstSeen : 01.01.2025 3:04:42

LastSeen : 12.07.2025 9:09:10

UserName :

UUID : 81E92C-0E8E-D835-1992-F02F742

PSComputerName


или так магия не работает?

раскрыть ветку (2)
0
Автор поста оценил этот комментарий

Вы че, я ж электрик, а не сисадмин, у меня и доменной сети-то нет.

Но если что, chatgpt по образцу Logon.log любой скрипт напишет. Может не с первого раза, но напишет.

0
Автор поста оценил этот комментарий

Дополнения не увидел.

Ну да, можно код на одном языке загрузить и попросить сконвертировать в другой. Для больших объемов кода эта не работает, но маленькие программы делает, часто с ошибками, но в несколько итераций получается. В данном случае ChatGPT с первого раза забыл написать один } потом исправил.

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

Вы смотрите срез комментариев. Чтобы написать комментарий, перейдите к общему списку