Приведенное ниже упрощается, если вы запрашиваете у клиента Windows, подключенного к тому же домену, что и запрашиваемая система, и вам могут потребоваться определенные права сверх стандартного пользователя домена.Если вы столкнетесь с проблемами аутентификации / разрешений, это будет первое, что я проверю.
Существует инструмент, доступный, по крайней мере, еще до Windows XP, под названием "qwinsta".Более поздние версии Windows имеют как qwinsta, так и «сеанс запросов».
qwinsta /server:computer01
SESSIONNAME USERNAME ID STATE TYPE DEVICE
console 0 Conn wdcon
rdp-tcp 65536 Listen rdpwd
administrator 2 Disc rdpwd
Это показывает, что пользователь «администратор» вошел в систему, но отключился.Поскольку в этом примере computer01 является системой Windows Server 2003 с лицензией RDP «администрирование» по умолчанию, существует второй сеанс, ожидающий подключения кого-либо.
Повторное выполнение этой же команды после подключения к ранее отключенному сеансу выглядит следующим образомthis:
SESSIONNAME USERNAME ID STATE TYPE DEVICE
[unchanged output removed]
rdp-tcp#25 administrator 2 Active rdpwd
Этого достаточно, чтобы ответить «кто-то в данный момент активен через RDP», и если вы используете отдельные имена пользователей, он должен также ответить на «кто».Если вы все используете "testuser" или "administrator" или что-то еще, вы, вероятно, захотите узнать ответ на вопрос "от какого клиента", а это не дано выше.
Вышеприведенное дает быстрыйБазовый ответ без необходимости дополнительных инструментов.Для получения более подробной информации вы можете обратиться к библиотеке кассии или PSTerminalServices (построена на кассии).См. Некоторые ответы в этом вопросе для получения более подробной информации.
Моей первой мыслью об этом было использование таких инструментов Sysinternals, как PsLoggedOn или LogonSessions .Затем я нашел ссылку на ранее неизвестные мне инструменты qwinsta и rwinsta в этом блоге 2003 года .