как узнать за каким компьютером работает пользователь в домене
На каком компьютере залогинился пользователь?
На каком компьютере залогинился пользователь?
В какой ситуации нам может понадобиться узнать, на каком компьютере залогинился (выполнил вход) пользователь?
Как правило, это нужно для того, чтобы удаленно подключиться к компьютеру клиента, либо при составлении отчетности, в которой указывается имя сотрудника и компьютер, за которым он сидит. Так же информация может быть полезна при проектировании групповой политики.
На просторах интернета я нашел различные варианты, в которых предлагаю писать скрипты, однако мы с вами рассмотрим метод куда проще.
Использую стандартные средства серверной операционной системы, в моем примере будет рассматриваться Windows Server 2008 R2.
Рассмотрим примерный сценарий задачи по поиску компьютера, на котором залоигнился (выполнил вход) пользователь.
Пользователь звонит вам в поисках решения определенного вопроса, и первым делом мы узнаем (если не знаем) фамилию и имя сотрудника. Далее, для подключения к компьютеру нам нужно, по полученным данным, выяснить за каким компьютером сидит данный сотрудник. Для этого заходим в (Пуск \ Администрирование \ Диспетчер сервера \ Роли \ Доменные службы Active Directory \ Active Directory – пользователи и компьютеры \ ваш домен.local \ ПКМ \ Найти)
Вводим имя сотрудника, которое нас интересует и жмем кнопку «Найти»
Из полученных данных нам нужно узнать логин пользователя, под которым он выполняет вход (залогинивается) в систему. Нужен именно логин, так как имя не является логином, по этому открываем свойства учетной записи и переходим во вкладку «Учетная запись». Где узнаем имя входа пользователя.
Теперь нам потребуется проверить, на какой компьютер последний раз выполнялся вход под данной учетной записью? Для этого запустим «Журнал событий» (Пуск \ Администрирование \ Просмотр событий \ Журналы Windows \ Безопасность)
Как вы видите, у нас есть записи из категории «Вход в систему» Именно в таких записях и хранится информация о том, на каком компьютере залогинился (выполнил вход) пользователь. Теперь нам остается найти запись, в которой фигурирует наш пользователь, для этого выполним поиск по данным записям щелкнув правой кнопкой мыши по вкладке (Безопасность \ Найти \ Вводим логин пользователя \ Найти далее) и ищем запись из категории «Вход в систему»
Заходим в свойства записи и смотрим, чтобы «Имя учетной записи» совпадало с нашим, если все совпадает, то смотрим «Сетевой адрес источника» это и есть IP адрес машины, на которую последний раз выполнял вход (залогинивался) наш пользователь.
Теперь можем узнать доменное имя машины, по её IP адресу через команду в командной строке (Пуск \ Выполнить \ cmd) ping –a 192.168.0.97
Вот и все, теперь мы знаем, что пользователь Севостьянов Антон последний раз был залогинен на компьютере admins. Скорее всего, он за ним и сидит.
А далее уже можем использовать полученную информацию в своих интересах, как вариант это подключиться через удаленный рабочий стол, удаленный помощник, Radmin или удаленно установить LiteManager и подключиться к нему.
В качестве альтернативы, можно вывести на рабочий стол IP адрес компьютера и спрашивать его у пользователя. Об этом я рассказывал в уроке по программе BGinfo для обычной сети и в домене.
Получаем в Powershell активных сессий пользователей AD и их компьютеров
Когда появляется необходимость сделать работу на компьютере пользователя, по его заявке, иногда бывает сложно узнать имя компьютера для подключения к нему. В этой статье будет рассмотрена возможность сбора всех активных сеансов пользователей (тех кто прошел аутентификацию на определенном компьютере) на всех компьютерах AD. Конечно, есть сторонние программы, которые решают такие проблемы и встроенные средства, но тут будет рассмотрена реализация через Powershell. Такой список так же хорошо подойдет для аудита, если понадобится быстро узнать кто пользовался компьютером и когда.
Навигация по посту
Как получить список залогиненных пользователей
В Powershell есть несколько методов возврата списка активных пользователей. Каждый из способов имеет свои минусы и поэтому, в зависимости от цели, какой-то способ будет удобнее использовать локально (при входе пользователя), а какой-то удаленно. В случае с WMI это так и не получилось сделать, так нет класса, который бы хранил все нужные значение и работал бы везде.
Локально при входе пользователя
Можно создать политику, которая будет запускать скрипт при входе и экспортировать в CSV. Сам файл CSV может находится на удаленном компьютере. Следующая команда сделает это записав данные в конец существующий файл (т.е. не перезапишет файл):
Получится примерно следующий вид файла:
Как создавать команды и функции в Powershell вызывать их и передавать параметры
Системная утилита quser.exe
Мы можем использовать системную программу quser, которая возвращает имя текущего пользователя и время его входа. Выглядит это так:
Quser так же может работать удаленно используя следующий синтаксис:
Для примера, следующие команды исправят эти проблемы на одном компьютере, но скорее всего вы будете менять настройки через политики. Так же обратите внимание, что правило устанавливается на «Any», а не только «Domain»:
Метод substring убирает первый символ, так как программа возвращает имя пользователя либо с пробелом начали или символом «>».
Такой скрипт мы можем объединить в один командлет, который сможет работать локально и удаленно:
В функцию добавлено несколько деталей:
Мы можем вызывать скрипт несколькими приемами:
Легче всего такой скрипт запускать на компьютерах пользователей, по событию входа в систему. На примере ниже я экспортирую эти данные в единый, для всех пользователей, файл CSV расположенный в доступности для пользователей:
Сам файл будет выглядеть так:
Отмечу следующие моменты:
Через файл ntuser.dat
Каждый раз, как пользователь входит в систему все его настройки загружаются из файла ntuser.dat, который находится в домашнем каталоге ‘C:\Users\UserName\’. При выходе из системы все настройки записываются в этот же файл. То есть мы можем получить имя пользователя по дате изменения этого файла.
В этом примере вернутся все каталоги пользователей:
Получим даты изменения файлов ‘ntuser.dat’:
Извлечем из пути имя пользователя и уберем лишние колонки:
Как вы знаете к большинству компьютеров можно подключится используя следующие пути:
Это же мы можем использовать с командой Get-ChildItem. Соединим все это в функцию:
Далее мы можем использовать команду в таких вариациях:
Ключ ‘-ErrorAction SilentlyContinue’ нужен для игнорирования ошибок связанных с выключенными компьютерами. Если его не написать вы получите ошибки формата:
Отмечу несколько моментов:
Представим, что мы захотим сформировать список из тех пользователей, которые выполнили выход за последний час. Это можно сделать так:
Исключить пользователей мы можем так же:
Экспорт для Excel аналогичен предыдущему примеру:
Через WMI
Я пробовал и другие классы, но каждый со своими проблемами. Решения так и не нашел.
Windows: узнаём, кто где залогинен
— Ой, у меня ничего не работает, помогите!
— Не переживайте, сейчас всё исправим. Назовите имя компьютера…
(классика жанра из звонков в техподдержку)
Хорошо, если у вас есть инструмент а-ля BgInfo или ваши пользователи знают про шорткат Windows+Pause/Break и умеют его нажимать. Встречаются даже редкие экземпляры, которые успели выучить имя своей машины. Но часто у звонящего вдобавок к его основной проблеме появляется вторая: узнать имя/IP-адрес компьютера. И нередко на решение этой второй проблемы уходит куда больше времени, чем первой (а надо было всего лишь обои поменять или вернуть пропавший ярлык :).
А ведь намного приятнее услышать что-то вроде:
— Татьяна Сергеевна, не беспокойтесь, уже подключаюсь…
А надо для этого не так уж и много. Специалисту техподдержки достаточно лишь выучить наизусть имена машин и помнить, кто за какой работает.
Перед описанием решения, которым мы пользуемся сейчас, я кратко рассмотрю другие варианты, чтобы раскритиковать их в пух и прах объяснить свой выбор.
Душу излил, а теперь к делу.
За основу была взята идея хабровчанина mittel из этой статьи.
Суть задумки в том, что при входе пользователя в Windows логон-скрипт заносит нужную информацию (время и имя машины) в определенный атрибут учётной записи пользователя. А при выходе из системы отрабатывает аналогичный логофф-скрипт.
Теперь скрипты выглядят так:
Кто первым найдет все отличия между логон- и логофф-скриптом, тому плюс в карму. 🙂
Также для получения наглядной информации создан такой небольшой PS-скрипт:
Буду признателен, если вы пройдете короткий опрос ниже.
Токарчук Андрей
Мне 34 года. Профессионально занимаюсь PHP-программированием. В работе использую PHP, JS, Symfony, Doctrine и многое другое. А вообще мне нравится всё новое и интересное 🙂
За каким компьютером работает пользователь Active Directory
В целях инвентаризации, да и вообще для админского удобства, надо знать за каким компьютером сидит пользователь. Ну и обратная задача — какой пользователь сидит за компом в данный момент. Решению этой задачи посвещен сегодняшний пост.
2. Аналогично проводим этот же этап для OU с компьютерами.
3. Создаём новый объект GPO и привязываем его к нужному OU с группой «Пользователи домена» в фильтрах безопасности. В папке \\yourdomain.local\SysVol\mniitep.ru\Policies\
writeComputerDescription_Logon.vbs
On Error Resume Next
Dim adsinfo, ThisComp, oUser
Set adsinfo = CreateObject(«adsysteminfo»)
Set ThisComp = GetObject(«LDAP://» & adsinfo.ComputerName)
Set oUser = GetObject(«LDAP://» & adsinfo.UserName)
oUser.put «description», «Computer: » + ThisComp.cn + » » + CStr(Now)
oUser.Setinfo
Thiscomp.put «description», «Logged on: » + oUser.cn + » » + CStr(Now)
ThisComp.Setinfo
Там же создаём скрипт writeComputerDescription_Logon.bat
writeComputerDescription_Logon.bat
wscript.exe //d //x \\mniitep.ru\SysVol\domain.local\Policies\
и прописываем его(bat-ник_ в политику.
Аналогично с logout (\\yourdomain.local\SysVol\mniitep.ru\Policies\
writeComputerDescription_Logout.vbs
On Error Resume Next
Dim adsinfo, ThisComp, oUser
Set adsinfo = CreateObject(«adsysteminfo»)
Set ThisComp = GetObject(«LDAP://» & adsinfo.ComputerName)
Set oUser = GetObject(«LDAP://» & adsinfo.UserName)
oUser.put «description», «>> Computer: » + ThisComp.cn + » » + CStr(Now)
oUser.Setinfo
Thiscomp.put «description», «>> Logged off: » + oUser.cn + » » + CStr(Now)
ThisComp.Setinfo
writeComputerDescription_Logon.bat
wscript.exe //d //x \\mniitep.ru\SysVol\domain.local\Policies\
В результате получится такая вот симпатюлина.
Ссылки
Спасибо!
Удобный поиск компьютера пользователя в домене Windows
Привет всем!
Работаю в компании. 1500+ активных пользователей.
Организован ХелпДеск, сотрудники регистрируют тикеты в системе, но, как-то так получается, что часть из юзеров забывают указывать имя пк, за которым они находятся.
Для выяснения этой информации (по телефону/email/экстрасенсорные способности) девочки из поддержки тратят драгоценное время, которое они могли бы уделить свежей чашке кофе или разговорам о новом платье (шутка). Наши сотрудники постоянно заняты своей непосредственной работой.
Идея (не инновация конечно) — писать данные о логонах пользователя в единую базу, а потом через веб оперативно искать нужную информацию.
Что у нас есть?
Windows среда (ХР/7/2003/2008), учетные записи хранятся в AD, все устройства работаю в локальной сети в качестве СУБД используем MSSQL 2005/2008R2.
Что мы хотим?
Поиск информации через веб интерфейс:
Должна отображаться информация:
Название?
Так как «решением» будут пользоваться несколько человек (от 5 до 35 человек), надо как-то его обозвать для удобства. Нарекли мы его «SuperVisor».
Приступим к реализации
Как будем писать в БД?
Первое, что пришло в голову — это создать bat файл с sqlcmd, но для каждой версии Windows нужна своя версия утилиты sqlcmd. Неудобно, и мы не стали копать глубже.
Вторым решением было создать небольшой exe клиент, который при запуске будет собирать данные об имени доменной учетной записи, имени пк, ip адресе пк и после получения этой информации будет выполняться вставка данных в БД. Программу размещаем, например, в папке NETLOGON на контроллере домена и групповыми политиками распространяем на ПК/Сервера в локальной сети компании.
Дальше алгоритм такой:
Таблицы созданы и наполняются данными. Забыл написать, что сервер БД у нас виртуальный и работает под Windows Server 2003R2, СУБД MSSQL 2008R2. Сервер приложения виртуальный, Windows 2003R2, Apache 2.2 + PHP 5.2
Следующий шаг — создание веб интерфейса для того, чтобы системные администраторы и сотрудники хелпдеска могли комфортно работать с сервисом. Во внутренних разработках, для экономии времени, я использую фреймфорк Bootstrap. Главная страница, до того как начинают вводить данные в поисковую строку, выглядит так:
В строку поиска можно ввести фамилию сотрудника/учетную запись(логин) или имя компьютера:
«Супервизор» работает у нас в компании около года, со своей главной задачей справляется отлично. Тикеты теперь берутся в работу оперативнее, сотрудникам не нужно тратить время на уточнение дополнительной информации для того, чтобы преступить к решению заявки.
Данное решение по определению имени компьютера получилось современным и удобным, на мой взгляд.