Как восстановить сеанс удаленного рабочего стола на локальной консоли?
15
После завершения подключения к удаленному рабочему столу я хотел бы иметь возможность восстановить удаленный рабочий стол на локальной консоли, чтобы пользователю не приходилось повторно вводить пароль и снова входить в систему.
Как я могу создать ярлык на рабочем столе для этого?
Создайте ярлык на рабочем столе, щелкнув правой кнопкой мыши на рабочем столе и выбрав новый, затем выберите ярлык.
В текстовое поле введите:
%windir%\System32\tscon.exe 0 /dest:console (См. ниже)
Щелкните правой кнопкой мыши по вновь созданному ярлыку, выберите Свойства.
Перейдите на вкладку быстрого доступа и нажмите кнопку «Дополнительно».
Установите флажок «Запуск от имени администратора» и нажмите «ОК».
Если это не работает, попробуйте изменить число ноль ( tscon.exe 0 /dest...) в шаге 2 на номер один, а если это не работает, продолжайте увеличивать его до тех пор, пока не будет выпущен удаленный рабочий стол.
Альтернативно, откройте оболочку с меню Пуск, запустите cmd. Введите qwinstaEnterи найдите идентификатор сеанса, который находится в активном состоянии (у него будет >символ в начале имени сеанса). Это число, которое нужно использовать на шаге 2.
Если вы хотите восстановить рабочий стол консоли, просто дважды щелкните по ярлыку и разрешите доступ администратора.
так как мы столкнулись с этим из-за этой проблемы : имейте в виду, что при использовании обходного пути с tscon сеанс остается открытым без блокировки! это означает, что любой, кто имеет подключение к консоли (например, через консоль менеджера виртуальных машин или vsphere), может использовать открытый сеанс даже от другого пользователя без входа в систему. Поэтому в используемом сценарии также должен быть сеанс lcok
rominator007
8
Вот версия, которая избегает зависимости от инструментов GNU. Он использует findstr, который поставляется с Windows.
for /f %%i in ('qwinsta ^| findstr /C:">rdp-tcp#"') do set RDP_SESSION=%%i
:: Strip the >
set RDP_SESSION=%RDP_SESSION:>=%
tscon %RDP_SESSION% /dest:console
Вот моя версия, оптимизированная до однострочного, чтобы быть удобной для ярлыков: %windir%\system32\cmd.exe /c "for /F "tokens=1 delims=^> " %i in ('""%windir%\system32\qwinsta.exe" | "%windir%\system32\find.exe" /I "^>rdp-tcp#""') do "%windir%\system32\tscon.exe" %i /dest:console"она заменяет >замену переменных среды дополнительным forприемом синтаксического анализа, а также добавляет cmdопции (для ярлыка). В сочетании с правильным значком (я использовал значок выхода из системы Shell32.dll), это выглядит примерно так .
Хелдер Магальес
Я должен был заставить этот ярлык запускаться от имени администратора, чтобы он работал. Щелкните правой кнопкой мыши> Свойства> Дополнительно
Джеймс Эш
2
Ответ glenviewjeff дал мне большую часть пути, но идентификатор сеанса не всегда 1. Если вы попытаетесь отключить сеанс прослушивания или консоли, как это, вы получите «Ошибка 7045» - запрошенный доступ к сеансу запрещен, или если Идентификатор сеанса не существует. Идентификатор сеанса не найден.
Я сделал небольшой командный файл, чтобы вытащить текущий сеанс. Поскольку я делал это в Windows XP, мне нужно было использовать qwinsta вместо запроса сеанса, чтобы выяснить текущий идентификатор. Этот пакетный файл использует утилиты командной строки Unix, я использую Gnu в Windows ( https://github.com/bmatzelle/gow/downloads ), чтобы получить к ним доступ. Он извлекает текущий сеанс путем поиска знака «>» и затем переназначает его обратно в сеанс консоли.
for /f %%i in ('qwinsta ^| grep "^>" ^| awk "{print $4}"') do set VAR=%%i
tscon %var% /dest:console
Мне это нужно было для машины, которая подключена к сканеру Fujitsu IX500, сканер сканирует, только если экран не отображается на экране выбора имени пользователя / входа в Windows, что вы получаете, когда вы выходите из системы или отключаетесь от сеанса в обычном режиме. Поскольку машина работает без экрана, я хочу иметь возможность подключиться через rdp, но если я это сделаю, я не смогу использовать кнопку аппаратного сканирования, пока не войду в систему вручную или не перезапущусь. Пакетный файл выше решает эту проблему.
Вот версия, которая избегает зависимости от инструментов GNU. Он использует findstr, который поставляется с Windows.
источник
%windir%\system32\cmd.exe /c "for /F "tokens=1 delims=^> " %i in ('""%windir%\system32\qwinsta.exe" | "%windir%\system32\find.exe" /I "^>rdp-tcp#""') do "%windir%\system32\tscon.exe" %i /dest:console"
она заменяет>
замену переменных среды дополнительнымfor
приемом синтаксического анализа, а также добавляетcmd
опции (для ярлыка). В сочетании с правильным значком (я использовал значок выхода из системыShell32.dll
), это выглядит примерно так .Ответ glenviewjeff дал мне большую часть пути, но идентификатор сеанса не всегда 1. Если вы попытаетесь отключить сеанс прослушивания или консоли, как это, вы получите «Ошибка 7045» - запрошенный доступ к сеансу запрещен, или если Идентификатор сеанса не существует. Идентификатор сеанса не найден.
Я сделал небольшой командный файл, чтобы вытащить текущий сеанс. Поскольку я делал это в Windows XP, мне нужно было использовать qwinsta вместо запроса сеанса, чтобы выяснить текущий идентификатор. Этот пакетный файл использует утилиты командной строки Unix, я использую Gnu в Windows ( https://github.com/bmatzelle/gow/downloads ), чтобы получить к ним доступ. Он извлекает текущий сеанс путем поиска знака «>» и затем переназначает его обратно в сеанс консоли.
Мне это нужно было для машины, которая подключена к сканеру Fujitsu IX500, сканер сканирует, только если экран не отображается на экране выбора имени пользователя / входа в Windows, что вы получаете, когда вы выходите из системы или отключаетесь от сеанса в обычном режиме. Поскольку машина работает без экрана, я хочу иметь возможность подключиться через rdp, но если я это сделаю, я не смогу использовать кнопку аппаратного сканирования, пока не войду в систему вручную или не перезапущусь. Пакетный файл выше решает эту проблему.
источник
Я не мог заставить команду командного файла Саймона Д работать. Вот что у меня работает на Windows 7 x64:
источник