Как узнать session id windows
Команда 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
Пример отображаемой информации:
query session /server:rdserver /mode - отобразить сведения о параметрах последовательного порта - скорость передачи, длина посылки, тип контроля четности, длина стоповых бит.
query session /server:SERVER /counter - отобразить статистические сведения о сеансах удаленного рабочего стола сервера SERVER. В этом случае, кроме списка активных сеансов, отображается еще и статистика в виде :
Всего сеансов создано: 185955
Всего сеансов отключено: 186146
Всего сеансов переподключено: 261
query session 1446 - отобразить сведения о сеансе с идентификатором >
query session admin /server:rdpserver - отобразить сведения о сеансе пользователя admin
Для получения сведений о терминальных серверах домена используется команда:
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.
QPROCESS /ID:144 - отобразить процессы сеанса с идентификатором 144
Пример отображаемой информации:
При большом объеме информации, можно использовать команду QUERY PROCESS в цепочке с командой more :
Query Process | more
Для получения сведений о пользователях используется команда:
QUERY USER [ | | ] [/SERVER: ]
Параметры командной строки:
пользователь - Имя пользователя.
имя сеанса - Имя сеанса.
ID сеанса - Идентификатор сеанса.
/SERVER:сервер - Опрашиваемый сервер (по умолчанию - текущий).
Примеры использования команды QUERY USER:
QUERY USER /? - отобразить подсказку по использованию команды.
QUERY USER - при выполнении команды QUERY USER без параметров, отображаются сведения о всех пользователях, вошедших в систему на данный момент времени.
Пример отображаемой информации:
QUERY USER /server:winsrv - отобразить информацию о пользователях, вошедших в систему на компьютере с именем winsrv . Результат выполнения команды зависит от прав пользователя по отношению к удаленной системе и настроек брандмауэра.
QUSER /server:192.168.0.1 - отобразить информацию о пользователях, вошедших в систему на компьютере с IP-адресом 192.168.0.1
Полезные команды cmd, powershell, администрирование, фичи и решения проблем на win/winserver
Рассмотрим такие команды как:
- query
- qwinsta (query session)
- quser (query user)
- mstsc (RDS shadow)
- msg
- change logon
- shutdown
query
process | session | termserver | user
Более подробно здесь рассмотрятся команды:
а точнее их более короткие аналоги: qwinsta и quser
qwinsta
С помощью этой команды можно узнать, активен ли сеанс пользователя и ID сеанса
Просто команда без каких либо ключей и параметров выводит список сеансов на текущем сервере:
Ключ /server позволит указать другой сервер:
Показать информацию о сеансе конкретного пользователя:
Также можно узнать информацию о сеансе пользователя на другом сервере:
Остальные параметры и подробная справка по команде:
quser
В остальном, все ключи у возможности, такие же как и у команды qwinsta:
Ключ /server позволит указать другой сервер:
Показать информацию о конкретном пользователе:
Показать информацию о конкретном пользователе на другом сервере:
Справка и все функции:
RDS shadow (mstsc)
Для того, чтобы узнать ID сеанса, нужно воспользоваться одной из вышеупомянутых команд: qwinsta или quser
Теневое подключение без возможности управления сеансом (только просмотр):
Теневое подключение для управления другим сеансом:
ключ /v:servername позволит подключиться к сеансам другого сервера:
ID сеанса можно узнать с помощью уже рассмотренных команд qwinsta или quser
change logon
Полностью отключить вход в терминальные сессии можно командой:
Все возможные ключи смотрим в справке:
shutdown
Так, например, команда shutdown со следующими параметрами:
Удаленно перезагрузить или выключить компьютер или группу компьютеров через GUI можно командой
Как я могу получить текущий идентификатор сеанса пользователя через командную строку Windows?
В списке задач под вкладкой «Пользователи» каждый пользователь связан с идентификатором сеанса. Я хочу получить это через командную строку, чтобы я мог использовать ее для удаленного приложения.
Query Session будет извлекать идентификатор сеанса:
Это объединяет аспекты ответа Гэри и Ответ Оскара . Как отметил Гэри, вывод query session выглядит примерно как
или, в моем случае (используя «Switch user»)
(У меня нет настройки RDP, поэтому я не могу с ней проверить). Предположительно, цель вопроса состоит в том, чтобы определить идентификатор текущего активного сеанса. Я предлагаю выполнить поиск query session для того, что похоже на текущий сеанс:
, который назначает второе, третье и четвертое слово (который мы надеемся быть ИМЯ ПОЛЬЗОВАТЕЛЯ, [СЕССИЯ] И ГОСУДАРСТВ) из каждой строки вывода query session в %a , %b и %c , соответственно, а затем сообщает SESSIONID из строки где USERNAME - я, а STATE - Active .
Оказывается, что query session принимает username , поэтому приведенное выше можно упростить до
Чтобы использовать это в скрипте (пакетный файл), вы можете сказать
используя %%a и %%b ( вместо %a и %b ), потому что это в сценарии. Вероятно, вы можете оставить @ если весь командный файл находится под кодом @echo off . Инициализация до unknown позволяет выполнять обработку ошибок (обнаружение отсутствия строки на выходе query session что соответствует). Расширение обработки ошибок для распознавания и реагирования если в выводе query session есть несколько совпадающих строк, остается в качестве упражнения.
В отличие от имени сеанса идентификатор сеанса не сохраняется в переменной и не так легко получить доступ. Я уверен, что есть один, но я не могу придумать встроенный инструмент командной строки, который делает это.
Он будет отображать идентификатор сеанса, а также иметь его как код возврата, чтобы вы могли использовать его в различных сценариях /методах.
Это основано на коде Oscar Beh.
tasklist будет отображать идентификатор сеанса (и другую информацию) для всех экземпляров данного исполняемого файла, включая его. Когда вы запустите команду, она покажет ваш идентификатор сеанса. Единственным потенциальным недостатком в его коде является то, что он не сообщает вам, есть ли несколько экземпляров программы, что может привести к тому, что скрипт вернет неправильные результаты.
Здесь мы сообщаем обо всех экземплярах tasklist , чтобы убедиться, что не существует другого сеанса, выполняющего эту команду:
В этой статье мы рассмотрим, особенности аудита / анализа логов RDP подключений в Windows. Как правило, описанные методы могут пригодиться при расследовании различных инцидентов на терминальных / RDS серверах Windows, когда от системного администратора требуется предоставить информацию: какие пользователи входили на RDS сервер, когда авторизовался и завершил сеанс конкретный пользователь, откуда / с какого устройства (имя или IP адрес) подключался RDP-пользователь. Я думаю, эта информация будет полезна как для администраторов корпоративных RDS ферм, так и владельцам RDP серверов в интернете (Windows VPS как оказалось довольно популярны).
Статья применима при исследовании RDP логов как в Windows Server 2008 R2, 2012/R2, 2016, так и в соответствующих десктопных версиях Windows (Windows 7, 8.1, 10).Как и другие события, логи RDP подключения в Windows хранятся в журналах событий. Откройте консоль журнала событий (Event Viewer). Есть несколько различных журналов, в которых можно найти информацию, касающуюся RDP подключения.
В журналах Windows содержится большое количество информации, но быстро найти нужное событие бывает довольно сложно. Когда пользователь удаленно подключается к RDS серверу или удаленному столу (RDP) в журналах Windows генерируется много событий. Мы рассмотрим журналы и события на основных этапах RDP подключения, которые могут быть интересны администратору:
- Network Connection
- Authentication
- Logon
- Session Disconnect/Reconnect
- Logoff
Network Connection: – установление сетевого подключение к серверу от RDP клиента пользователя. Событие с EventID – 1149 (Remote Desktop Services: User authentication succeeded). Наличие этого события не свидетельствует об успешной аутентификации пользователя. Этот журнал находится в разделе Applications and Services Logs -> Microsoft -> Windows -> Terminal-Services-RemoteConnectionManager -> Operational. Включите фильтр по данному событию (ПКМ по журналу-> Filter Current Log -> EventId 1149).
В результате у вас получится список с историей всех сетевых RDP подключений к данному серверу. Как вы видите, в логах указывается имя пользователя, домен (используется NLA аутентификация, при отключенном NLA текст события выглядит иначе) и IP адрес компьютера, с которого осуществляется RDP подключение.
При этом имя пользователя содержится в описании события в поле Account Name, имя компьютера в Workstation Name, а имя пользователя в Source Network Address.
Обратите внимание на значение поля TargetLogonID – это уникальный идентификатор сессии пользователя с помощью которого можно отслеживать дальнейшую активность данного пользователя. Однако при отключении от RDP сессии (disconnect) и повторного переподключения в сессию, пользователю будет выдан новый TargetLogonID (хотя RDP сессия осталась той же самой).Вы можете получить список событий успешных авторизаций по RDP (событие 4624) с помощью такой команды PowerShell.
Get-EventLog security -after (Get-date -hour 0 -minute 0 -second 0) | ? | Out-GridView
Событие с EventID – 21 (Remote Desktop Services: Shell start notification received) означает успешный запуск оболочки Explorer (появление окна рабочего стола в RDP сессии).
Session Disconnect/Reconnect – события отключения / переподключения к сессии имеют разные коды в зависимости от того, что вызвало отключение пользователя (отключение по неактивности, выбор пункта Disconnect в сессии, завершение RDP сессии другим пользователем или администратором и т.д.). Эти события находятся в разделе журналов Applications and Services Logs -> Microsoft -> Windows -> TerminalServices-LocalSessionManager -> Operational. Рассмотрим RDP события, которые могут быть интересными:
- EventID – 24 (Remote Desktop Services: Session has been disconnected) – пользователь отключился от RDP сессии.
- EventID – 25 (Remote Desktop Services: Session reconnection succeeded) – пользователь переподключился к своей имеющейся RDP сессии на сервере.
- EventID – 39 (Session <A> has been disconnected by session <B>) – пользователь сам отключился от своей RDP сессии, выбрав соответствующий пункт меню (а не просто закрыл окно RDP клиента). Если идентификаторы сессий разные, значит пользователя отключил другой пользователь (или администратор).
- EventID – 40 (Session <A> has been disconnected, reason code <B>). Здесь нужно смотреть на код причины отключения в событии. Например:
- reason code 0 (No additional information is available)– обычно говорит о том, что пользователь просто закрыл окно RDP клиента.
- reason code 5 (The client’s connection was replaced by another connection) – пользователь переподключился к своей старой сессии.
- reason code 11 (User activity has initiated the disconnect) – пользователь сам нажал на кнопку Disconnect в меню.
Событие с EventID – 4778 в журнале Windows -> Security (A session was reconnected to a Window Station). Пользователь переподключился к RDP сессии (пользователю выдается новый LogonID).
Событие с EventID 4799 в журнале Windows -> Security (A session was disconnected from a Window Station). Отключение от RDP сеанса.
Logoff: – выход пользователя из системы. При этом в журнале Applications and Services Logs -> Microsoft -> Windows -> TerminalServices-LocalSessionManager -> Operational фиксируется событие с EventID 23 (Remote Desktop Services: Session logoff succeeded).
При этом в журнале Security нужно смотреть событие EventID 4634 (An account was logged off).
Событие Event 9009 (The Desktop Window Manager has exited with code (<X>) в журнале System говорит о том, что пользователь инициировал завершение RDP сессии, и окно и графический shell пользователя был завершен.
Ниже представлен небольшой PowerShell, который выгружает из журналов терминального RDS сервера историю всех RDP подключений за текущий день. В полученной таблице указано время подключения, IP адрес клиента и имя RDP пользователя (при необходимости вы можете включить в отчет другие типы входов).
Иногда бывает удобно с логами в таблице Excel, в этом случае вы можете выгрузить любой журнал Windows в текстовый файл и импортировать в Excel. Экспорт журнала можно выполнить из консоли Event Viewer (конечно, при условии что логи не очищены) или через командную строку:
WEVTUtil query-events Security > c:\ps\security_log.txt
get-winevent -logname "Microsoft-Windows-TerminalServices-LocalSessionManager/Operational" | Export-Csv c:\ps\rdp-log.txt -Encoding UTF8
Список текущих RDP сессий на сервере можно вывести командой:
Команда возвращает как идентификатор сессии (ID), имя пользователя (USERNAME)и состояние (Active/Disconnect). Эту команду удобна использовать, когда нужно определить ID RDP сессии пользователя при теневом подключении.
Список запущенных процессов в конкретной RDP сессии (указывается ID сессии):
На RDP-клиенте логи не такие информационные, основное чем часто пользуются информация об истории RDP подключений в реестре.
Читайте также: