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...

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

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

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

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

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

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

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

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

Песочницы на Virustotal работают некорректно, я их проверил на заведомо чистых файлах, но они тоже показывают подозрительные действия.

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

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

Ура, спасибо. Принимаю.
Есть совет, как снизить размер файла exe, сохранив его автономность и чтобы он не требовал установки dotnet-ов и проч?

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

@melinger, нужен ваш комментарий, пожалуйста.

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

Уже предоставил коллеге все файлы проекта

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

wmic

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

Чуть подраскройте идею

показать ответы
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 файлов системных логов.

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

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

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

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

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

А, понял

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

Ну давай, выложи проект свой программы, чтобы он скомпилился в тот бинарник, что ты залил на Гугл

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

Если про цирк - ваше письмо, тогда смотрите почту

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

Ну и ответьте, зачем программе которая просто открывает текстовый файл, использовать вызов

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

Shell Execute запускает ваш почтовый клиент, когда вы нажимаете на ссылку в левом нижнем углу программы. Как в инете нашёл, так и сделал. Как мне chatgpt подсказал, так и реализовано.


Private Sub LinkLabel1_LinkClicked(sender As Object, e As LinkLabelLinkClickedEventArgs) Handles LinkLabel1.LinkClicked

' Укажите ваш email здесь:

Dim email As String = "kirillgromov@gmail.com"

Dim mailto As String = "mailto:" & email

Try

Dim psi As New ProcessStartInfo With {

.FileName = mailto,

.UseShellExecute = True}

Process.Start(psi)

Catch ex As Exception

MessageBox.Show("Не удалось открыть почтовый клиент: " & ex.Message)

End Try

End Sub

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

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

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

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

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

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

Да ладно, а это что?

кстати, у меня вчера он на VirusTotal не запустился в песочнице. Там, похоже, не один подарок в комплекте.

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

Kaspersky Endpoint Security с сегодняшними базами не видит ничего подобного.

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

Ну давай, выложи проект свой программы, чтобы он скомпилился в тот бинарник, что ты залил на Гугл

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

Почту укажите, пожалуйста - вышлю проект. Там, возможно, будут ФИО, вытащенные из доменных учеток, поэтому не хочу на всеобщее обозрение его класть.
Я собрал в архив ВСЁ по моему проекту - и сырцы, и предыдущие версии. Мне скрывать нечего.

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

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

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

Согласен. В течение часа сделаю.

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

Я думаю, это следствие ленивой разработки на фреймворке, приложение включает в себя 195 МБ универсального мусора в виде иконок всех святых, библиотек на случаи поливания виртуальных цветов через интернет и отправки открыток в Вацап на день горькой жопки огурца.

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

Но про ленивую разработку вы почти правы.

Только не "ленивую", а "как умею".

До создания этой софтинки я никогда не открывал Visual Studio и никогда не писал на VB.

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

@melinger, нужен ваш комментарий, пожалуйста.

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

Есть хорошая идея. Пусть товарищ @apple.mary цепляется ко мне rudesktop'ом или anydesk'ом, и мы скомпилим и соберём проект совместно. Возможно, товарищ подкинет по ходу анализа моего проекта идею, как снизить его размер, сохранив автономность.


Я не зашивал туда ничего злонамеренного, у меня банально не хватит знаний.

Прога написана для использования в отделе коллегами.

Выложил "as is".

Передам исходники любому желающему.

показать ответы
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 файлов системных логов.

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

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


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

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

Поведение как раз криминальное. Это же целенаправленная атака на доменные сети, они специально делаются чтобы не детектиться антивирусами.

Ну и полный игнор ТСом комментариев тоже намекает.

ТС, кстати, личность весьма специфическая, можешь его ЖЖ глянуть

https://melinger.livejournal.com/

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

Вы чего, собственно, на меня наговариваете? Я здесь, я доступен. И не ожидал никаких комментариев.

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

Я думаю, это следствие ленивой разработки на фреймворке, приложение включает в себя 195 МБ универсального мусора в виде иконок всех святых, библиотек на случаи поливания виртуальных цветов через интернет и отправки открыток в Вацап на день горькой жопки огурца.

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

Вообще-то не совсем.

Если на компе стоит dotnet, тогда вполне запускается версия, которая весит метров десять, что ли. Из чего я делаю вывод, что этот дикий вес - компоненты dotnet.


При сборке, компиляции можно поснимать галки, что включать в сборку, а что нет, но моих знаний абсолютно недостаточно для этого. Разве что опытным путём.