Как посмотреть кто залогинен на удаленном компьютере
Достаточно часто на форумах возникает вопрос – “Как получить имя пользователя работающего в системе в данный момент?”. Такое может понадобится например если у нас есть сценарий обрабатывающий все включенные компьютеры, и ему нужно знать имя текущего пользователя.
Итак, какие есть решения… А решений вроде бы немало. Во-первых – psloggedon.exe, прекрасная утилита от Microsoft SysInternals с отличными возможностями… но не для нашей задачи. Лучшее что она может – вывести список учетных записей выполнивших вход. Интерактивных и нет. Пользовательских и служб…
Итак, решение на PowerShell. Сразу в виде удобной функции. По умолчанию получает текущего пользователя для локального компьютера, но можно указать и удалённый.
Фактически тут только 1-2 строчки. Остальное для читабельности и обёртка в функцию. Копипастим её в консоль (или сразу в файл профиля), и используем:
Share this:
Понравилось это:
Похожее
AccountType : 512
Caption : ISEA\abigor_adm
Domain : ISEA
SID : S-1-5-21-839522115-2146729155-1343024091-10617
FullName : Захарченко Андрей Русланович
Name : abigor_adm
AccountType : 512
Caption : ISEA\abigor_adm
Domain : ISEA
SID : S-1-5-21-839522115-2146729155-1343024091-10617
FullName : Захарченко Андрей Русланович
Name : abigor_adm
AccountType : 512
Caption : ISEA\abigor
Domain : ISEA
SID : S-1-5-21-839522115-2146729155-1343024091-9845
FullName : Захарченко Андрей Русланович
Name : abigor
хе-хе, надо еще фильтр делать 🙂 я со своего компа еще запустил пару mmc под второй учеткой, они видятся так так же как сейчас работающие.
2 abigor, угу, я для того и дал ссылку на типы логонов. Просто в первом запросе меняй 🙂
может все же свой свойство RemoteInteractive не надо сюда вставлять? чтоб выловить только интерактивных?
хе, как всегда, сначала пишу, потом читаю как говорится 🙂 сначало запостил, потом стал разбирать запрос wmi
вася, ты религиозный фоннат. Понятно же, что на вбскрипте там собственно кода тоже ОДИН запрос к WMI. Точно такой же, не поверишь, как и у тебя. А всё остальное — тоже всякие обвязки.
А встроенная команда whoami не подходит ?
2 cognize: Нет разумеется. Я хотел отдельно упомянуть чтобы не путали с определением пользователя под которым выполняется сценарий, но подумал что и так внимательно читать будут 🙂 Ни whoami ни $env:username не подходят.
2 Kudrat: psloggedon 😉
Артём, я не много не до понял, ссылка, которую вы привели (она кстати не работает), есть в данной статье. Код, который вы привели, однозначно больше чем код на posh. Ну и на мой взгляд это вообще не корректно сравнивать, код на posh можно было свести в одну строчку, а он разросся только из-за того что из него сделали командлет для постоянного использования.
Может вы объясните что вы хотели сказать?
Василий, я хотел спросить, не в тему, по поводу:
> psloggedon… А еще у неё какие то проблемы с юникодом
Вы, не в курсе, — сие (для некоторых консольных утилит от бывшего Sysinternals) принципиально не лечится?
Я пробовал разные способы, также раза два за последние три года кропотливо лопатил поиск, — безрезультатно. Случайно наткнулся на упоминание об этой проблеме у Вас и решил поинтересоваться.
Довольно часто администратору нужно быстро узнать имя пользователя, который выполнил вход на удаленном компьютере Windows. В это статье мы рассмотрим несколько утилит и PowerShell скриптов, которые помогут вам узнать имена пользователей, залогиненых на удаленных компьютерах в сети.
Утилиты PSLoggedOn и Qwinsta
В комплекте утилит SysInternals PSTools от Microsoft есть консольная утилита PSLoggedOn.exe, которую можно использовать для получения имени пользователя, который вошел на удаленный компьютер, а также список подключенных к нему SMB сеансов.
Скачайте утилиту и запустите ее в формате:
Как вы видите, утилита вернула имя залогиненного пользователя (Users logged on locally), а также список пользователей, которые по сети используют ресурсы с этого компьютера (Users logged on via resource shares).
Если нужно получить только имя пользователя, вошедшего локально, используйте опцию –l:
Psloggedon.exe \\wks215s1 –l
Утилита Psloggedon подключается к реестру и проверяет в нем имя пользователя, вошедшего локально. Для этого должна быть включена служба RemoteRegistry. Вы можете запустить ее и настроить автозапуск службы с помощью PowerShell:
Set-Service RemoteRegistry –startuptype automatic –passthru
Start-Service RemoteRegistry
Также можно получить список сессий на удаленном компьютере с помощью встроенной утилиты qwinsta . Эта утилита должна быть знакома любому администратору, управляющему терминальными серверами с Remote Desktop Services. Чтобы получить список сессий с удаленного компьютера, выполнит команду:
Утилита возвращает список всех сессий (активных и отключенных по таймауту) на RDS сервере или десктопной редакции Windows 10 (даже если вы разрешили к ней множественные RDP подключения).
Если при подключении к удаленному серверу через qwinsta вы получаете ошибку Error 5 Access Denied, проверьте что на удаленном компьютере разрешено удаленное управление пользователями через RPC. Включите, если нужно через реестр следующей командой или через GPO:reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server" /v "AllowRemoteRPC" /t "REG_DWORD" /d "1" /f
Получаем имя пользователя на удаленном компьютере через PowerShell
Вы можете получить имя пользователя, который залогинен на компьютере через WMI класс Win32_ComputerSystem. Откройте консоль PowerShell и выполните команду:
Get-WmiObject -class Win32_ComputerSystem | Format-List Username
Команда вернула имя пользователя, который выполнил вход на компьютер.
У командлета Get-WmiObject есть параметр –ComputerName, который можно использовать для получения доступа к WMI объектам на удаленном компьютере. Следующая команда вернет имя пользователя с удаленного компьютера:
Данная команда показывает только пользователя, вошедшего на консоль (не через RDP).
Также для получения информации с удаленных компьютеров можно использовать PSRemoting с помощью командлета Invoke-Command.Если нужно получить только имя пользователя на компьютере (без домена), воспользуетесь следующими командами:
Get-CimInstance –ComputerName wks215s1 –ClassName Win32_ComputerSystem | Select-Object UserName
(Get-CimInstance -ComputerName wks215s1 -ClassName Win32_ComputerSystem).CimInstanceProperties | where| select value
GetCiminstance использует WinRM для подключения к удаленным компьютерам, поэтому на них нужно включить и настроить WinRM через GPO или командой:
PowerShell скрипт для проверки пользователей на удаленных компьютерах
Если вам нужно собрать информацию о пользователях сразу с нескольких компьютерах, можете использовать следующую PowerShell функцию получить имена пользователей.
На вход функции Get-LoggedUser нужно передать имена компьютеров, на которых нужно проверить имена пользователей:
Если для какого-то компьютера функция вернула пустое имя пользователя, значит на компьютер никто не залогинен.
Можно получить имена пользователей, которые работают на компьютерах в домене Active Directory. Для получения списка компьютеров нужно использовать командлет Get-ADComputer. В следующем примере мы получим имена пользователей, которые работают за активными компьютерами в определенном OU домена. Чтобы скрипт работал быстрее перед тем, как обратится к обратится к удаленному компьютеру, я добавил проверку его доступности по сети через ICMP пинг с помощью командлета Test-NetConnection:
Также обратите внимание, что вы можете хранить в свойствах компьютеров в AD имя пользователя, который выполнил вход. Для этого можно использовать логон скрипт, описанный в статье “Set-ADComputer: добавляем информацию о пользователе в свойства компьютеров AD”
После этого вам не нужно сканировать все компьютеры, чтобы найти где залогинен определенный пользователь. Можно найти компьютер пользователя простым запросом к Active Directory:
$user='dvpetrov'
$user_cn=(get-aduser $user -properties *).DistinguishedName
Get-ADComputer -Filter "ManagedBy -eq '$user_cn'" -properties *|select name,description,managedBy|ft
В какой ситуации нам может понадобиться узнать, на каком компьютере залогинился (выполнил вход) пользователь?
Как правило, это нужно для того, чтобы удаленно подключиться к компьютеру клиента, либо при составлении отчетности, в которой указывается имя сотрудника и компьютер, за которым он сидит. Так же информация может быть полезна при проектировании групповой политики.
На просторах интернета я нашел различные варианты, в которых предлагаю писать скрипты, однако мы с вами рассмотрим метод куда проще.
Использую стандартные средства серверной операционной системы, в моем примере будет рассматриваться Windows Server 2008 R2.
Рассмотрим примерный сценарий задачи по поиску компьютера, на котором залоигнился (выполнил вход) пользователь.
Пользователь звонит вам в поисках решения определенного вопроса, и первым делом мы узнаем (если не знаем) фамилию и имя сотрудника. Далее, для подключения к компьютеру нам нужно, по полученным данным, выяснить за каким компьютером сидит данный сотрудник. Для этого заходим в (Пуск \ Администрирование \ Диспетчер сервера \ Роли \ Доменные службы Active Directory \ Active Directory – пользователи и компьютеры \ ваш домен.local \ ПКМ \ Найти)
Вводим имя сотрудника, которое нас интересует и жмем кнопку «Найти»
Из полученных данных нам нужно узнать логин пользователя, под которым он выполняет вход (залогинивается) в систему. Нужен именно логин, так как имя не является логином, по этому открываем свойства учетной записи и переходим во вкладку «Учетная запись». Где узнаем имя входа пользователя.
Теперь нам потребуется проверить, на какой компьютер последний раз выполнялся вход под данной учетной записью? Для этого запустим «Журнал событий» (Пуск \ Администрирование \ Просмотр событий \ Журналы Windows \ Безопасность)
Заходим в свойства записи и смотрим, чтобы «Имя учетной записи» совпадало с нашим, если все совпадает, то смотрим «Сетевой адрес источника» это и есть IP адрес машины, на которую последний раз выполнял вход (залогинивался) наш пользователь.
Теперь можем узнать доменное имя машины, по её IP адресу через команду в командной строке (Пуск \ Выполнить \ cmd) ping –a 192.168.0.97
Вот и все, теперь мы знаем, что пользователь Севостьянов Антон последний раз был залогинен на компьютере admins. Скорее всего, он за ним и сидит.
А далее уже можем использовать полученную информацию в своих интересах, как вариант это подключиться через удаленный рабочий стол, удаленный помощник, Radmin или удаленно установить LiteManager и подключиться к нему.
В качестве альтернативы, можно вывести на рабочий стол IP адрес компьютера и спрашивать его у пользователя. Об этом я рассказывал в уроке по программе BGinfo для обычной сети и в домене.
С чего начинается администрирование пользователей на сервере терминалов?
Конечно с просмотра «Активных» или «Отключенных» сессий пользователей.
Без этой картины администрирование сервера терминалов невозможно.
Помимо статьи, записал также, и подробное видео, о том как администрировать пользователей на сервере терминалов (Новичкам смотреть обязательно!)
Конечно, данная тема также подымается и на курсе: Администратор 1С!
И так, конечно мы должны во всех подробностях видеть, что у нас происходит на сервере терминалов!
Какие процессы запущены от имени тех или иных пользователей (в т.ч. процессы 1С) их идентификаторы, id сессий пользователей, это и многое другое помогает администратору всегда быть в курсе того что происходит на сервере и соответственно всем этим управлять, и вовремя реагировать на различные ситуации.
На разных версиях Windows server администраторы по-разному решают этот вопрос.
Кто-то смотрит пользователей используя простой «Диспетчер задач» на Windows server 2012 – 2016. Некоторые используют различные команды в CMD, ну а кое-кто использует PowerShell .
Но все администраторы хотят одного:
1. Чтоб быстро посмотреть всех пользователей кто работает на сервере.
2. Чтоб это было как можно информативней.
3. Чтоб бесплатно.
Поэтому поводу решил собрать все лучшие, простые и быстрые способы которые (на мое мнение) стоит использовать.
Уверен, что многим начинающим администраторам эти способы помогут в администрировании сервера терминалов.
И так способ первый и самый простой (На Windows server 2012 R2)
1. Диспетчер задач.
Правый клик мышкой на панели «Пользователь» и в появившимся контекстном меню
ставим птичку напротив «Сеанс» а также стоит поставить и напротив «Имя клиента».
Так мы будем знать, что этот пользователь работает у нас на сервере через RDP.
Минусы данного способа здесь очевидны, чтоб смотреть пользователей мы должны находится на сервере терминалов, где собственно и запускаем «Диспетчер задач», нет возможности сделать какую-то выборку, фильтр и т.д.
2. quser
Следующий метод это использование команды quser в CMD или PowerShell.
Quser – это аналог QUERY USER (Такое сокращение позволяет выполнять команду быстрее)
Здесь все просто запускаем CMD или PowerShell и пишем команду quser
Так мы увидим всех пользователей, что работают на этом сервере.
Метод очень простой быстрый и достаточно информативный.
Если мы хотим посмотреть только какого-то конкретного пользователя, тогда можно написать например так:
Term01 – это логин пользователя.
Большинство системных администраторов отдают предпочтение именно этому способу.
И не только потому, что быстро, просто и т.д., но и потому что можно смотреть удаленно всех пользователей, сидя за своим ПК, где не будь в локальной сети.
И для этого достаточно ввести команду с параметром SERVER
Вместо IP можно указать (хост) имя сервера терминалов.
Формат командной строки:
QUSER [; пользователь ; | ; имя сеанса ; | ; ID сеанса ;] [/SERVER:; сервер ;]
Если Вы хотите больше узнать о технической стороне 1С, тогда регистрируйтесь на первый бесплатный модуль курса: Администратор 1С
Читайте также: