Автоматическое отслеживание сеанса RDP - PullRequest
0 голосов
/ 28 апреля 2018

Я хочу создать скрипт powershell. Одна из наших компаний поддержки должна время от времени подключаться к нашему серверу, чтобы выполнить свою работу, и мне нужно подключить их сеанс RDP, чтобы посмотреть, в порядке ли их работа.

Сервер: MS Server 2012 R2 x64

Дело в том, что я хочу создать скрипт, который;

1 - проверяет текущие сеансы сервера 2- Находит конкретный идентификатор сеанса от имени пользователя (которое я дам им для подключения), в данный момент зарегистрировано как RDP 3- Когда я получаю правильный идентификатор сеанса из имени пользователя (и это означает, что он в данный момент подключен к сети и подключен), я хочу скрыть его / ее сеанс, не запрашивая / не запрашивая их подтверждения.

Да, я могу сделать это по отдельности, но с помощью сценария powershell или чего-то подобного. В одной из попыток я хочу скрыть rdp, чтобы исправить сеанс, и если он / она не подключен к сети, я хочу, чтобы система вернула мне информационное сообщение о том, что имя пользователя в данный момент не подключено.

Возможно ли это?

Спасибо и наилучшие пожелания Мели

1 Ответ

0 голосов
/ 29 апреля 2018

Если память обслуживает, PoSh не поддерживает запросы RDP-сессий (если только не использует RDS-брокер, но я могу ошибаться), но вы можете легко сделать это с помощью запроса

Я не могу проверить это прямо сейчас, но что-то вроде этого должно сработать:

C:\>query session
  SESSIONNAME USERNAME       ID STATE  TYPE    DEVICE
  console     Administrator1 0  active wdcon
  rdp-tcp#1   User1          1  active wdtshare
  rdp-tcp                    2  listen wdtshare

Вы даже можете позвонить с именем пользователя напрямую, если оно вам известно.

Слежение за сессией можно легко выполнить с помощью чего-то вроде

mstsc /v:"$srv" /shadow:"$id" /control /noconsentprompt

Я не проверял это, так что, возможно, он нуждается в некоторой настройке, но возможной отправной точкой может быть

$userSessions = query session user01 /SERVER:server01 | Select-Object -skip 1 | ForEach-Object{$_.Split(' ',[System.StringSplitOptions]::RemoveEmptyEntries)}
$sessionId = $userSessions[2]

mstsc /v:"$srv" /shadow:"$sessionId" /control /noconsentprompt

Конечно, при запуске с локального сервера вы можете опустить аргумент / SERVER: XXX.

Надеюсь, это поможет вам начать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...