В настоящее время мы занимаемся разработкой и мониторингом более 1 учетной записи RDP (администратора) на машине server 2008 r2, так как каждый должен использовать один и тот же экземпляр для обеспечения согласованности. Проблема в том, что пока один человек подключен и работает, если кто-то другой попытается подключиться, используя ту же учетную запись, он отключит первого человека и уступит управление второму. Единственное предупреждение приходит слишком поздно, когда первый человек получает сообщение «Другой пользователь подключился к удаленному компьютеру, поэтому ваше соединение было потеряно».
Есть ли какой-либо известный способ предупредить входящего пользователя о том, что кто-то уже подключен (аналогично типу сообщения, которое вы можете получить при работе с другими учетными записями), или разрешить жертве возможность не загружаться?
Плохие новости для вас: Невозможно заставить RDP предупреждать вас, когда вы собираетесь войти в существующий сеанс. Он только предупреждает, когда вы собираетесь войти через RDP и другой пользователь уже вошел в систему. грустное лицо
Подождите ... теоретически это возможно с помощью удаленного сценария. Вы можете использовать query
команда и user
возможность получить список вошедших в систему пользователей. Затем вы можете найти интересующее вас имя пользователя и посмотреть, ACTIVE
тег находится в STATE
столбец. Оттуда вы можете вызвать файл .rdp, если пользователь не вошел в систему, или отправить диалоговое окно с предупреждением, если пользователь является вошел.
Он самодельный, но должен работать.
Пример с одного из моих серверов Windows:
C:\Users\BigKahuna>query user
USERNAME SESSIONNAME ID STATE IDLE TIME LOGON TIME
>BigKahuna rdp-tcp#0 1 Active . 3/26/2012 6:51
PM
Этот сценарий vbs можно использовать, чтобы не выгнать кого-то, кто уже вошел на сервер Windows под тем же именем пользователя:
Set objShell = WScript.CreateObject("WScript.Shell")
Set p = objShell.Exec("qwinsta /server:serverName")
Do While p.Status = 0
WScript.Sleep 100
Loop
If InStr(p.StdOut.ReadAll, "Active") <= 0 then objShell.Run("mstsc C:\Users\username\Documents\Default.rdp")
На самом деле он просто проверяет, есть ли вообще какой-либо активный пользователь, но, зная свое имя пользователя, вы можете изменить последнюю строку, чтобы проверить именно его.