- Поиск активных сессий и залогиненных пользователей с Powershell
- Получение имени залогиненного пользователя
- Получение списка компьютеров
- Удаленное получение залогиненных пользователей
- Получение включенных пользователей AD
- Whoami или WMI
- 7 способов посмотреть, кто работает на сервере терминалов
- Команда Query — отображение информации о сеансах пользователей.
Поиск активных сессий и залогиненных пользователей с Powershell
Иногда может понадобится проверить какие в данный момент залогинены в системе, то есть являются активными. Такую информацию можно использовать для аудита, например для проверки какие учетные записи за какими компьютерами сидят или для последующей перезагрузки сервера, что бы не останавливать работу коллег. В примерах ниже рассмотрено как выполнять удаленные команды для получения активных пользователей и возврата включенных пользователей Active Directory.
Навигация по посту
Получение имени залогиненного пользователя
Я не могу вспомнить готовую команду Powershell, которая бы вернула логин пользователя, но такая возможность есть через WMI:
Есть еще вариант использовать CIM, который может работать немного быстрее:
Обе команды могут работать удаленно если добавить атрибут ComputerName:
Если вы планируете выполнять эти команды удаленно, то может понадобится выполнить предварительные настройки в виде открытия портов и необходимых правах.
Получить только имя пользователя можно так:
Как вы знаете в Winodws есть так же параллельные сеансы сервисов. Если вам нужно вернуть имена этих аккаунтов нужно использовать класс «win32_LoggedOnUser»:
Получение списка компьютеров
Если у вас нет списка компьютеров к которым вы планируете подключиться и узнать активного пользователя — это можно сделать через AD. На примере ниже будут возвращены все компьютеры:
Операция по получению списка компьютеров может быть очень долгой, если у вас большой парк ПК в AD. Вы можете вернуть только компьютеры, которые не отключены в AD (Disable) следующим способом:
Можно использовать и фильтрацию. Так я верну компьютеры имена которые начинаются на «CL»:
Получить список имен мы можем так:
Если у вас список компьютеров не относится к AD или имеет другой формат — то просто преобразуйте его в массив:
Удаленное получение залогиненных пользователей
Выше уже рассматривался вариант получения имени пользователя удаленно используя WMI и CIM. Если обе команды, то всех пользователей активных в данный момент мы можем получить так:
Такой подход может привести к ошибкам так как мы не проверяем включены ли компьютеры:
Мы можем просто не выводить ошибки с помощью «-ErrorAction SilentlyContinue» или заранее пинговать (что было бы правильнее с точки зрения времени выполнения). В примере ниже я так же разбиваю имя компьютера и логин в более удобный формат:
Если вы не хотите выполнять команды удаленно через WMI, то вы можете использовать PSRemoting. От так же требует предварительных настроек, которые описаны в статье «Удаленное управление через Powershell». Команда, которая использует PSRemoting, будет выглядеть примерно так же:
Получение включенных пользователей AD
Если вам нужно вернуть учетные записи, которые включены в AD выполните следующую команду:
Для возврата только отключенных учетных записей используйте $False.
Такой подход работает и с объектами компьютеров в AD:
Для последующей выгрузки данных в Excel почитайте статью «Как в Powershell выгрузить из AD пользователей и группы CSV».
Whoami или WMI
Вы можете вспомнить команду, которая так же возвращает имя пользователя:
Как можно увидеть она вернет ту же информацию, что и класс WMI. Ситуация меняется, когда эти команды используются удаленно:
Как видно, в случае с whoami у нас вернулось имя учетной записи выполнившей команду Powershell, а с WMI пользователь Windows.
7 способов посмотреть, кто работает на сервере терминалов
С чего начинается администрирование пользователей на сервере терминалов?
Конечно с просмотра «Активных» или «Отключенных» сессий пользователей.
Без этой картины администрирование сервера терминалов невозможно.
Помимо статьи, записал также, и подробное видео, о том как администрировать пользователей на сервере терминалов (Новичкам смотреть обязательно!)
Конечно, данная тема также подымается и на курсе: Администратор 1С!
И так, конечно мы должны во всех подробностях видеть, что у нас происходит на сервере терминалов!
Какие процессы запущены от имени тех или иных пользователей (в т.ч. процессы 1С) их идентификаторы, id сессий пользователей, это и многое другое помогает администратору всегда быть в курсе того что происходит на сервере и соответственно всем этим управлять, и вовремя реагировать на различные ситуации.
На разных версиях Windows server администраторы по-разному решают этот вопрос.
Кто-то смотрит пользователей используя простой «Диспетчер задач» на Windows server 2012 – 2016. Некоторые используют различные команды в CMD, ну а кое-кто использует PowerShell .
Но все администраторы хотят одного:
1. Чтоб быстро посмотреть всех пользователей кто работает на сервере.
2. Чтоб это было как можно информативней.
3. Чтоб бесплатно.
Поэтому поводу решил собрать все лучшие, простые и быстрые способы которые (на мое мнение) стоит использовать.
Уверен, что многим начинающим администраторам эти способы помогут в администрировании сервера терминалов.
И так способ первый и самый простой (На Windows server 2012 R2)
1. Диспетчер задач.
«Диспетчер задач» – вкладка «Пользователи» – позволяет нам видеть пользователей, которые работают на этом сервере.
Но по умолчанию стандартный «Диспетчер задач» – вкладка «Пользователи» нам не покажет, что пользователь работает на сервере удаленно, используя RDP, хорошо, что это можно легко исправить.
Правый клик мышкой на панели «Пользователь» и в появившимся контекстном меню
ставим птичку напротив «Сеанс» а также стоит поставить и напротив «Имя клиента».
Так мы будем знать, что этот пользователь работает у нас на сервере через RDP.
Минусы данного способа здесь очевидны, чтоб смотреть пользователей мы должны находится на сервере терминалов, где собственно и запускаем «Диспетчер задач», нет возможности сделать какую-то выборку, фильтр и т.д.
2. quser
Следующий метод это использование команды quser в CMD или PowerShell.
Quser – это аналог QUERY USER (Такое сокращение позволяет выполнять команду быстрее)
Здесь все просто запускаем CMD или PowerShell и пишем команду quser
Так мы увидим всех пользователей, что работают на этом сервере.
Метод очень простой быстрый и достаточно информативный.
Он покажет Вам – Пользователя, Сеанс, его ID, Статус , Бездействие сеанса, и время входа.
Если мы хотим посмотреть только какого-то конкретного пользователя, тогда можно написать например так:
Term01 – это логин пользователя.
Большинство системных администраторов отдают предпочтение именно этому способу.
И не только потому, что быстро, просто и т.д., но и потому что можно смотреть удаленно всех пользователей, сидя за своим ПК, где не будь в локальной сети.
И для этого достаточно ввести команду с параметром SERVER
Вместо IP можно указать (хост) имя сервера терминалов.
Формат командной строки:
QUSER [; пользователь ; | ; имя сеанса ; | ; ID сеанса ;] [/SERVER:; сервер ;]
Если Вы хотите больше узнать о технической стороне 1С, тогда регистрируйтесь на первый бесплатный модуль курса: Администратор 1С
Команда Query — отображение информации о сеансах пользователей.
Команда QUERY используется для получения информации об использовании терминальных серверов пользователями, выполнившими подключение к удаленным рабочим столам по протоколу RDP (Remote Desktop Protocol). Позволяет получить сведения о подключениях и некоторые статистические данные об использовании ресурсов терминальных серверов.
Команда применяется в одном из контекстов:
По каждому из контекстов можно получить подсказку по использованию:
Query PROCESS /? — отобразить справочную информацию об использовании команды query process — сведения о процессах.
Команда QUERY PROCESS может быть заменена командой QPROCESS, команда QUERY USER – командой QUSER, команда QUERY SESSION – командой QWinsta, команда QERY TERMSERVER – командой Qappsrv.
Для получения сведений о сеансах пользователей используется команда:
QUERY SESSION [имя сеанса | пользователь | ID сеанса] [/SERVER:сервер] [/MODE] [/FLOW] /CONNECT] [/COUNTER] [/VM]
имя сеанса — Имя сеанса.
пользователь — Сеанс пользователя с этим именем.
ID сеанса — Идентификатор сеанса.
/SERVER:сервер — Опрашиваемый сервер (по умолчанию текущий).
/MODE — Отображение текущих параметров линии. Используется при удаленном подключении с использованием последовательных линий связи.
/FLOW — Отображение текущих параметров управления потоком. Используется при удаленном подключении с использованием последовательных линий связи .
/CONNECT — Отображение текущих параметров подключения.
/COUNTER — Отображение информации счетчиков служб удаленных рабочих столов.
/VM — Отображение информации о сеансах в виртуальных машинах.
query session /server:rdserver1 — отобразить сведения о сеансах всех пользователей терминального сервера rdserver1
Пример отображаемой информации:
СЕАНС rdp-tcp#2 rdp-tcp | ПОЛЬЗОВАТЕЛЬ netadmin termuser User RDPuser1 Samara buhgalt9 ukit | ID 2 3 7 9 15 266 65536 | СТАТУС Активно Диск Диск Активно Активно Диск Прием | ТИП rdpwd query session /server:rdserver /mode — отобразить сведения о параметрах последовательного порта — скорость передачи, длина посылки, тип контроля четности, длина стоповых бит. query session /server:SERVER /counter — отобразить статистические сведения о сеансах удаленного рабочего стола сервера SERVER. В этом случае, кроме списка активных сеансов, отображается еще и статистика в виде : Всего сеансов создано: 185955 Всего сеансов отключено: 186146 Всего сеансов переподключено: 261 query session 1446 — отобразить сведения о сеансе с идентификатором > qwinsta — отобразить информацию о всех сеансах всех пользователей текущего компьютера. Локальные сеансы отображаются с именем console , удаленные – rdp-tcp#N Для получения сведений о терминальных серверах домена используется команда: QUERY TERMSERVER [имясервера] [/DOMAIN:домен] [/ADDRESS] [/CONTINUE] Параметры командной строки: имя_сервера — Задает сервер, обслуживающий сеансы подключения к удаленному рабочему столу. /DOMAIN:домен — Отображение информации для указанного домена (по умолчанию для текущего домена). /ADDRESS — Отображение адресов сети и узлов. /CONTINUE — Не останавливаться при заполнении каждого экрана. query termserver — отобразить информацию о всех терминальных серверах текущего домена. query termserver RDserver /ADDRESS — отобразить информацию о терминальном сервере RDserver текущего домена, включая его адрес. qappsrv.exe /domain:MyDom — отобразить информацию о терминальных серверах домена MyDom . Для отображения сведений о процессах используется команда: QUERY PROCESS [* | | | | /ID:nn ] /SERVER: ] Параметры командной строки: * — Отображать все видимые процессы. ID процесса — Отображение процесса, заданного этим идентификатором. пользователь — Отображение всех процессов для данного имени пользователя. имя сеанса — Отображение всех процессов для указанного сеанса. /ID:nn — Отображение всех процессов для сеанса nn . имя программы — Отображение всех процессов, связанных с этой программой. /SERVER:имя_сервера Опрашиваемый сервер, обслуживающий сеансы подключения к удаленному рабочему столу. Примеры использования QPROCESS: QUERY PROCESS /? — отобразить подсказку по использованию команды. QUERY PROCESS * — отобразить сведения обо всех видимых процессах QUERY PROCESS — при выполнении команды без параметров, отображаются сведения о процессах текущего пользователя. QUERY PROCESS /server:winsrv — отобразить процессы текущего пользователя на сервере с именем winsrv QUERY PROCESS /server:192.168.0.1 — отобразить процессы текущего пользователя на сервере с IP-адресом 192.168.0.1 QUERY PROCESS user1 — отобразить сведения о процессах, выполняющихся в контексте пользователя с именем user1 query process система — отобразить сведения о системных процессах. QUERY PROCESS svchost.exe — отобразить сведения о процессах, связанных с исполняемым файлом svchost.exe При получении сведений о процессах, связанных с исполняемым файлом, указывать расширение обязательно. Например: query process services.exe — отобразить сведения о процессах, связанных с исполняемым файлом services.exe query process services — отобразить сведения о процессах, связанных с сеансом services query process console — отобразить все процессы сеанса console — локального пользователя Windows. query process rdp-tcp#0 — отобразить все процессы, связанные с удаленным сеансом rdp-tcp#0 . QPROCESS /ID:144 — отобразить процессы сеанса с идентификатором 144 Пример отображаемой информации:
При большом объеме информации, можно использовать команду QUERY PROCESS в цепочке с командой more : Query Process | more Для получения сведений о пользователях используется команда: QUERY USER [ | | ] [/SERVER: ] Параметры командной строки: пользователь — Имя пользователя. имя сеанса — Имя сеанса. ID сеанса — Идентификатор сеанса. /SERVER:сервер — Опрашиваемый сервер (по умолчанию — текущий). Примеры использования команды QUERY USER: QUERY USER /? — отобразить подсказку по использованию команды. QUERY USER — при выполнении команды QUERY USER без параметров, отображаются сведения о всех пользователях, вошедших в систему на данный момент времени. Пример отображаемой информации:
При выполнении команды, отображаются имена пользователей, тип сеанса, идентификатор, статус, время бездействия и время входа в систему. В примере, пользователь user1 вошел в систему локально ( сеанс console , а пользователь user2 — удаленно (сеанс rdp-tcp#0 ) QUERY USER /server:winsrv — отобразить информацию о пользователях, вошедших в систему на компьютере с именем winsrv . Результат выполнения команды зависит от прав пользователя по отношению к удаленной системе и настроек брандмауэра. QUSER /server:192.168.0.1 — отобразить информацию о пользователях, вошедших в систему на компьютере с IP-адресом 192.168.0.1 |