1

Я успешно использую команду tsdiscon для отключения от подключения к удаленному рабочему столу. Я сделал «bat-файл» с этой строкой и назначил ярлык для этой функции. Теперь у меня проблемы с использованием команды на компьютерах с Windows 10 .

Старое использование

С помощью tsdiscon я могу успешно выйти из RDP-соединения в двух случаях:

  1. Когда я нахожусь в сеансе RDP, я выйду из сеанса RDP
  2. Когда я нахожусь на локальной машине, сеанс RDP также будет прерван. Пока ничего не случится с локальной машиной

Текущая проблема

В последнее время, возможно, из-за обновлений Windows 10, выполнение этой команды в сеансе удаленного рабочего стола приведет к отключению не только сеанса RDP, но и локального компьютера. Это немного раздражает. Соответственно, когда я запускаю команду tsdiscon в обоих случаях:

  1. Если я нахожусь в сеансе RDP, я получу не только подпись от этого удаленного сеанса, но и локальную машину
  2. Если я нахожусь на локальной машине, я получу подпись на обеих машинах.

Решение?

Могу ли я передать конкретное имя сеанса, которое я бы хотел завершить с помощью tsdiscon ? Или должен быть определенный параметр, определяющий, в какой области эта команда вступит в силу?

До сих пор та же самая команда (tsdiscon) работала таким же старым способом на машинах с Windows 7 . Он стал глючить, когда я начал использовать компьютер с Windows 10 для запуска сеанса удаленного рабочего стола.

1 ответ1

0

Это попытка ответить на мои собственные вопросы, заданные почти 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 много.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .