Это попытка ответить на мои собственные вопросы, заданные почти 2 года назад. Я все еще использую RDP на ежедневной основе и потратил больше времени на чтение команды tsdiscon
.
Более короткий ответ
Во-первых, позвольте мне ответить на оригинальный вопрос. Согласно документации, команда tsdiscon
принимает диапазон параметров, включая SessionName
и SessionId
. Выполнение команды query session
через командную строку должно открыть эти два поля.
PS C:\WINDOWS\system32> query session
SESSIONNAME USERNAME ID STATE TYPE DEVICE
services 0 Disc
>rdp-tcp#84 Your_Username 1 Active
console 3 Conn
rdp-tcp 65536 Listen
За час до ввода этого ответа меня смутило, где следует вводить команду tsdiscon
: первоначальная путаница в вопросе указывает на конкретное недопонимание ==> команда tsdiscon
не должна выдаваться с локальной машины, когда эта локальная машина - персональный компьютер. Это более верно, когда я являюсь единственным пользователем этого локального персонального компьютера. Могу поспорить, что использование tsdiscon
предназначено для администратора сервера, чтобы выгнать людей со своего сервера :)
Тем не менее, я думаю, что стоит обсудить, как правильно вернуться к удаленным сеансам RDP. Сейчас я использую подход AutoHotKey, который состоит из двух частей: 1. чтобы вернуться из сеанса RDP; а затем 2. убить локальный сеанс RDP с локальной машины.
Лучший выход
Часть 1: возвращение из удаленного сеанса RDP
На данный момент я разработал следующий ярлык, чтобы вернуть меня из сеанса RDP. При сохранении идентичного сценария на локальном компьютере и на удаленном компьютере, подключенном к RDP, нажатие Ctrl + CapsLock (сначала Ctrl , затем Capslock) должно "скрыть" сеанс RDP и почти всегда восстанавливать фокус клавиатуры + мыши обратно на локальный машина.
; The following are AutoHotKey scripts.
#IfWinActive ahk_class TscShellContainerClass
^Capslock::
Sleep 50
WinMinimize
return
#IfWinActive
; Make-shift script as suggested by: https://autohotkey.com/boards/viewtopic.php?t=25432
; May solve the awkward loss-of-focus when returning back from RDP
^Capslock::
WinGetClass activeclass, A
WinGetTitle activetitle, A
MsgBox, 48, Warning, %activetitle% ahk_class %activeclass%, 0.666666
return
Простое решение "убить" сеанс RDP
Поскольку комбинация клавиш Ctrl + CapsLock должна работать в 99% случаев, я упростил задачу: убить существующий сеанс RDP. Опять же, AutoHotKey пригодится, так как у меня может быть несколько сеансов RDP на разных машинах, и мне нужно будет убить только одну из них.
#+y::
WinClose, <Session 1: name_of_the_saved_RDP_config_file> - Remote Desktop Connection
WinClose, <Session 2: name_of_the_saved_RDP_config_file> - Remote Desktop Connection
return
Нужно тщательно заменить часть <Session 1...>
скрипта AHK. Он должен соответствовать заголовку окна сеанса RDP, когда он активен. Я обычно смотрю это, используя следующие процедуры: 1. Откройте сеанс RDP в окне, т.е. не охватывая все активные мониторы. 2. Откройте "Windows Spy", AHK-утилиту, которая раскрывает все идентификаторы для "окна": полный набор идентификаторов включает в себя Window-Title, process_name и win_class_name.
PS: во время моего еженедельного домашнего улучшения (-code-) я собирался снова решить проблему с tsdiscon
. С очень похожими условиями запроса я с удовольствием заново открою этот старый вопрос. После более внимательного прочтения документации стало очевидно, что я не должен делать ставку на одну единственную команду для обработки всего моего использования. Таким образом, приходит этот долгий ответ. Надеюсь, что это может помочь людям, которые играют с RDP много.