- Команда Query — отображение информации о сеансах пользователей.
- Поиск активных сессий и залогиненных пользователей с Powershell
- Получение имени залогиненного пользователя
- Получение списка компьютеров
- Удаленное получение залогиненных пользователей
- Получение включенных пользователей AD
- Whoami или WMI
- query session query session
- Синтаксис Syntax
- Параметры Parameters
- Комментарии Remarks
- Примеры Examples
Команда 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 Поиск активных сессий и залогиненных пользователей с 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. query session query sessionОбласть применения: Windows Server (половина ежегодного канала), Windows Server 2019, Windows Server 2016, Windows Server 2012 R2, Windows Server 2012 Applies to: Windows Server (Semi-Annual Channel), Windows Server 2019, Windows Server 2016, Windows Server 2012 R2, Windows Server 2012 Отображает сведения о сеансах на сервере узла сеансов удаленный рабочий стол. Displays information about sessions on a Remote Desktop Session Host server. Список включает сведения не только об активных сеансах, но и о других сеансах, которые выполняет сервер. The list includes information not only about active sessions but also about other sessions that the server runs. Чтобы узнать о новых возможностях последней версии, см. статью новые возможности службы удаленных рабочих столов в Windows Server. To find out what’s new in the latest version, see What’s New in Remote Desktop Services in Windows Server. Синтаксис SyntaxПараметры Parameters
Комментарии RemarksПользователь всегда может запрашивать сеанс, в который в данный момент вошел пользователь. A user can always query the session to which the user is currently logged on. Чтобы запросить другие сеансы, пользователь должен иметь специальное разрешение на доступ. To query other sessions, the user must have special access permission. Если вы не укажете сеанс, используя параметры , или SessionID , в этом запросе будут отображаться сведения обо всех активных сеансах в системе. If you don’t specify a session using the , , or sessionID parameters, this query will display information about all active sessions in the system. Когда сеанс запроса возвращает сведения, (>) перед текущим сеансом отображается символ «больше чем». When query session returns information, a greater than (>) symbol is displayed before the current session. Например: For example:
Примеры ExamplesЧтобы отобразить сведения обо всех активных сеансах на сервере Server2, введите: To display information about all active sessions on server Server2, type: Чтобы отобразить сведения о modeM02 активного сеанса, введите: To display information about active session modeM02, type: |