Windows 7 / Getting Started
Before you try to shadow a session, there are two things to keep in mind. First, you can
shadow a session only from another RDP session because you’re basically intercepting the
graphics output of the shadowed session and sending it to your own session. You can’t send
RDP updates to a local logon, just as you can’t connect to an RDP session from a local logon.
(You’ll see this when you start the Remote Desktop Services Manager from the console session;
there’s a warning that these tools will be disabled.)
Somewhat more insidiously, you can’t shadow all remote sessions. To be precise, you can
only shadow sessions connecting to a full desktop using a single monitor. It will appear that
you can shadow other sessions, because nothing in the user interface prevents you from connecting
to a session hosting RemoteApp programs, and you won’t see any warnings. However,
shadowing RemoteApp programs isn’t supported and really doesn’t work well. The problem
is that enabling RemoteApp programs requires detailed communication between server
and client to position the window correctly. This communication doesn’t extend to both the
computer from which the administrator is shadowing the session and the original client. If the
administrator shadowing the session moves the application window, it might disappear from
the session when the administrator restores control, or it might just render the application un-responsive.
Therefore, although it is technically possible to shadow a RemoteApp session, it’s
pretty useless. Before shadowing, be sure that you’re connecting to a full desktop session.
NOTE: Neither the Remote Desktop Services Manager nor the command-line tools make
it easy to distinguish between full desktops and RemoteApp sessions. To learn how to distinguish
between sessions running RemoteApp programs and those running a full desktop,
see the section entitled «Differentiating RemoteApp Sessions from Full Desktop Sessions» later in this tutorial.
Shadowing a session is simple, and you can do it from the Remote Desktop Services Manager or from a command prompt.
To shadow from the GUI, create an RDP connection to a server or desktop and run the
Remote Desktop Services Manager. On the Users tab in the middle pane, right-click the user
whose session you want to shadow and select Remote Control. If the user’s permission is
required, the user will receive a remote control request and can accept or deny it.
On the server, you will see a dialog box asking you to specify a key sequence to end the
shadow session. Ctrl+Tab is the default choice, but you can choose other options if the default doesn’t work for you.
Your screen might freeze briefly while the user is alerted to your shadow request if
shadowing is configured to notify the user (and the user’s screen might blink once when you connect).
After the user grants you permission to shadow the session, your session will be replaced
with the user’s session desktop. If settings only permit you to view the session, then you will
be able to see the user’s actions, but you won’t be able to interact with the session. Otherwise,
you can take part in the session as if you were the user. To stop shadowing, simply press
the hot key sequence that you selected when establishing the session; the shadow session will
disappear and you will be back to your desktop. The user’s session will continue as normal.
You can also start a shadow session from the command line. Again, you’ll need to establish
an RDP session first and run the command from it. To get remote control of a session
from the command line, use the shadow command and provide the name of the session ID to
which you want to connect. To shadow a session on a remote computer, add the name of the
server, as in this example of shadowing session 2 on server FLAPJACK.
shadow /SERVER:flapjack 2
When you start a shadow session from the command line, there is no prompt for you to
choose a hot key sequence to end the shadow session. To end the shadow session, use the hot key sequence Ctrl+*.
NOTE: The asterisk above the number 8 does not work to stop shadowing. Use the asterisk on your numeric keypad.
Время на прочтение
3 мин
Количество просмотров 303K
Однажды мне захотелось управлять одним из домашних компьютеров удаленно, но при этом взаимодействовать с текущим пользователем, но компьютер был довольно слабый и при запуске например TeamViewer’а нагрузка процессора поднималась до 98% и компьютер начинал заметно тормозить. Попробовал стандартный RDP, но тогда «выбивался» текущий пользователь и для входа локально приходилось набивать пароль. Но чуть позже мне случайно попалась команда shadow.
Наблюдать за другим сеансом служб удаленных рабочих столов.
SHADOW {<имя сеанса> | <ID сеанса>} [/SERVER:<сервер>] [/V]
<имя сеанса> Имя сеанса.
<ID сеанса> Идентификатор сеанса.
/SERVER:<сервер> Сервер терминалов (по умолчанию текущий).
/V Отображение информации о выполненных действиях.
Например для управления консольным сеансом(пользователем который непосредственно сидит перед компьютером) текущего терминального сервера достаточно ввести команду выполнить — shadow 0. Выход осуществляется через alt * на обычном компьютере и через ctrl * на терминальном сервере.
Но есть неприятная особенность: эта команда работает только из под rdp сессии. Но мой управляемый компьютер был под управлением windows xp поэтому пришлось расширить его возможности сделав из него терминальный сервер (в интернете полно статей как это можно сделать). Тогда все стало довольно просто, подключаемся любым пользователем с правами администратора по rdp и запускаем команду выполнить — shadow 0 попадаем в консольный сеанс, собственно что мне и нужно было. Для уменьшения аппаратных затрат можно при создании rdp подключения выбрать функцию «При подключении запускать следующую программу» и там набрать shadow 0 как на рисунке.
Тогда получается что запускается всего 2 процесса.
Для того что бы все это работало нам необходимо сначала включить RemoteRPC, например через реестр:
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server]
“AllowRemoteRPC”=dword:00000001
После этого можно будет через Диспетчер служб удаленных рабочих столов посмотреть какие пользователи залогинены на компьютере, какие у них id и какие процессы запущены (жаль только названия, нет информации о нагрузке).
По умолчанию пользователю будет задаваться вопрос с разрешением управления, можно отключить вопрос или сделать только удаленное наблюдение, меняется через реестр:
[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services]
«Shadow»=dword:0000000x
Где x может иметь значения:
0 — удаленное управление не разрешено
1 -полный контроль с разрешения клиента
2 -полный контроль без разрешения клиента
3 -наблюдение за сеансом с разрешением клиента
4 -наблюдение за сеансом без разрешения клиента
По умолчания этой строчки вообще нет и её нужно будет создавать.
Так же можно включить через групповые политики локальные или доменные. Для включения локально запускаем gpedit.msc — выбираем административные шаблоны — добавление и удаление шаблонов, добавляем System.adm из папки WINDOWS\inf
Теперь настраиваем: конфигурация компьютера — административные шаблоны — компоненты windows — службы терминалов — устанавливает правила для удаленного управления. Для windows xp.
И конфигурация компьютера — административные шаблоны — компоненты windows- службы удаленных рабочих столов – узел сеансов удаленных рабочих столов – подключения – устанавливает правила удаленного управления для пользовательских сеансов служб удаленных рабочих столов. Для windows 7.
Все это работает и в домене, если у пользователя есть соответствующие права.
В доменных настройках профиля пользователя тоже есть настройка подобных прав (я встречал эти настройки даже в домене win 2000)
Если рассматривать терминальный сервер, то там через свойства RDP(через конфигурация узла сеансов удаленных рабочих столов) можно выставить любому пользователю права на удаленное управление,
и отдельно настроить взаимодействие или управление удаленным сеансом.
Для удобства можно подключаться через диспетчер задач
- Remove From My Forums
-
Question
-
Hi,
I am struggling with a strange issue. In an RDS 2012 R2 VDI setup I am unable to shadow Windows 7 VDI computers.
The Windows 7 VDI computers are all updated with the lates Microsoft Updates including the RDP 8.x updates.
When I try to shadow a user from with in the Server Manager I get an «access denied» error message. I have created a Remote Assistance GPO which enables the Domain Admins Group to perform unsolicited remote assistance. The same GPO configures
the Windows Firewall to allow Remote Assistance.I know this GPO works, because I have no issues shadowing my WIndows 8.1 VDI computers
During my research I have found these registry values:
AllowRemoteRPC
fServerEnableRDP8
Both are set to 1 (Enabled)
When I set these registry values I get another error massage when I am trying to shadow that says «The version of Windows running on this server does not support user shadowing» which is not true since I can shadow my WIndows 8.1 VDI computers
Is shadowing Windows 7 VDI computers not supported in RDS 2012 R2 or am I missing something?
-
Edited by
Friday, March 20, 2015 11:56 AM
-
Edited by
Answers
-
Hi,
This is normal. If you have users connecting to Windows 7 VMs using RDP 8.0 (because you enabled RDP 8.0 for incoming in the VM) then shadowing is
not supported. There is no support for shadowing in RDP 8.0.If users connect to the VM using RDP 7.1 (RDP 8.0 disabled for incoming in the VM) then you would be able to shadow them using the old method. By old method I mean open a remote desktop connection to a RDP 7.1 host and then within that use RDS Manager
or shadow.exe to initiate the shadow of the Windows 7 VM.-TP
-
Marked as answer by
TP []MVP
Monday, March 23, 2015 9:03 AM
-
Marked as answer by
-
Hi,
The official statement is in the Known Issues section for the RDP 8.0 update for Windows 7:
Remote Desktop Protocol (RDP) 8.0 update for Windows 7 and Windows Server 2008 R2
https://support.microsoft.com/en-us/kb/2592687
You cannot add support for RDP 8.1 incoming to Windows 7, so your choice is to use RDP 7.1 and have shadowing, or use RDP 8.0 and give up shadowing capability.
-TP
-
Marked as answer by
Kasper Johansen
Monday, March 23, 2015 9:01 AM
-
Marked as answer by
Вы можете использовать возможности теневых подключений (Remote Desktop Shadowing) для удалённого подключение к сессиям пользователей на компьютерах Windows. Это функционал является по сути аналогом Remote Assistance и позволяет администраторам удаленно просматривать и взаимодействовать с рабочим столом пользователей как на десктопных версиях (Windows 11 или 10), так и на RDS серверах Windows Server.
Содержание:
- Настройка клиентов Windows для удаленного подключения через теневые сессии
- Удаленное подключение к сессии пользователя Windows через RDP Shadowing
Настройка клиентов Windows для удаленного подключения через теневые сессии
Вам нужно определенным образом настроить компьютеры, к которым вы хотите подключаться через теневое подключение.
- Включите удаленный рабочий стол (RDP) на компьютерах пользователей (вручную или через GPO);
- Ваша учетная запись должна обладать правами локального администратора на компьютере пользователей (вы можете добавить пользователя в группу администраторов вручную или с помощью групповых политик);
- Настройте режим теневого подключения (нужно ли запрашивать подтверждение пользователя, и возможно управления в сессии или только наблюдение). Можно настроить режим через групповую политику “Установить правила удаленного управления для пользовательских сеансов служб удаленных рабочих столов” (Set rules for remote control of Remote Desktop Services user sessions) в разделе Конфигурация компьютера -> Административные шаблоны –> Компоненты Windows –> Службы удаленных рабочих столов –> Узел сеансов удаленных рабочих столов –> Подключения (Policies -> Administrative Templates -> Windows components -> Remote Desktop Services -> Remote Session Host -> Connections).
Доступны 5 режимов:0 – запретить удаленное управление;
1 — полный контроль с разрешения пользователя;
2 — полный контроль без разрешения пользователя;
3 — наблюдение за сеансом с разрешения пользователя;
4 — наблюдение за сеансом без разрешения пользователя. - Вы можете включить нужный режим напрямую в реестре. Отредактируйте реестр вручную или с помощью команды (в этом примере мы установили 4 режим – разрешить просмотр сеанса пользователя без уведомления):
reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v Shadow /t REG_DWORD /d 4
По умолчанию данный теневое подключение выполняется в режиме полного контроля с разрешения пользователя.
- Настройте правила Windows Defender Firewall, разрешающие трафик теневых подключений по сети. Для трафика session shadowing в Windows вместо стандартного порта 3389/RDP используются порты 139/TCP, 445/TCP и диапазон динамических RPC портов (49152 по 6553). Чтобы разрешить входящий трафик теневых подключений, нужно включить два преднастроненных правила в Windows:
File and Printer Sharing (SMB-In)
и
Remote Desktop - Shadow (TCP-In)
. Последнее правило разрешает удаленный доступ к процессу
RdpSa.exe
. Вы можете включить правила Windows Defender на компьютерах пользователей через GPO или с помощью PowerShell командлета Enable-NetFirewallRule.
Удаленное подключение к сессии пользователя Windows через RDP Shadowing
Рассмотрим, как удаленно подключиться рабочему столу сессии другого пользователя на удаленном компьютере Windows через теневые подключения RDP. В этом примере я покажу, как подключиться с компьютера Windows 11 к сессии пользователя на рабочей станции пользователя с Windows 10.
Для теневого подключения к сессии пользователя используется стандартная RDP утилита mstsc.exe. Формат команды такой:
Mstsc.exe /shadow:<ID сессии> /v:<Имя или IP адрес компьютера>
Также можно использовать одну из опций:
- /prompt – запросить имя и пароль пользователя, под которым выполняется подключение (если не указано, подключение выполняется под текущим пользователем).
- /control – режим взаимодействия с сеансом пользователя. Если параметр не задан, вы подключитесь в режиме просмотра (наблюдения) сессии пользователя, т.е. вы не сможете управлять его мышью и вводить данные с клавиатуры;
- /noConsentPrompt – не запрашивать у пользователя подтверждение на подключение к сессии.
Теперь нужно узнать имя пользователя и ID его сессии на удаленном компьютере (если пользователь работает непосредственно за консолью компьютера, то ID его сессии всегда будет равно 1).
Выведем список сессий пользователей на удаленном компьютере (это может быть как десктопный компьютер с Windows 11/10 или Windows Server с ролью Remote Desktop Services Host (RDSH).
qwinsta /server:wks-w10b01
В данном примере видно, что на компьютере залогинен один пользователь a.novak, который работает непосредственно за компьютером (
SESSIONNAME=console
). Идентификатор сессии ID=1.
Чтобы подключиться к рабочему столу этого пользователя через теневое подключение, выполните команду:
mstsc.exe /shadow:1 /v:wks-w10b01
На экране пользователя Windows появится запрос подтверждения подключения администратора к его сеансу: Запрос на удаленное подключение Username запрашивает удаленный просмотр вашего сеанса. Вы принимаете этот запрос.
Если служба TermService на удаленном компьютере отключена, то при попытке удалённого подключения через RDP shadow появится ошибка:
The version of Windows running on this server does not support user shadowing
Если пользователь разрешит соединение, вы подключитесь к его консольному сеансу и увидите его рабочий стол. Вы будете видеть все действия пользователя, но не сможете взаимодействовать с его сессией. Если вы хотите управлять его сессией, добавьте в команду параметр /control. В этом случае надпись в заголовке окна сменится с
Viewing username (sessionID 1) on computername
на
Controlling…
В данном случае вы подключились непосредственно подключиться к консольной сессии пользователя без блокировки его сеанса. При удаленном подключении к Windows 10 через обычный RDP, то сессия локального отключается (даже если вы включите возможность использования нескольких одновременных RDP сессий в Windows 10).
Если сессия пользователя заблокирована, или появляется запрос повышения привилегий UAC, то без исопльзования режима
mstsc /control
окно с теневой сессией становится черным и на нем появляется символ паузы.
Теневая сессия переходит в приостановленное состояние, если у пользователя появляется запрос UAC на Secure desktop. После того, как пользователь подтвердит действие UAC, ваша сессия возобновится.
Чтобы развернуть окно теневой сессии во весь экран, воспользуйтесь комбинацией клавиш Ctrl + Alt + Break.
Для завершения теневой сессии нажмите на компьютере
alt+*
(или
ctrl+*
на RDS сервере).
Вы можете оповестить пользователя о том, что кто-то удаленно подключится к его сессии через теневое подключение с помощью следующего PowerShell скрипта:
while($true){
if (Get-Process -Name "RdpSa" -ErrorAction SilentlyContinue){[console]::beep(1000,500);Write-Host "RdpSa is running at $(Get-Date)"}
Start-Sleep -Seconds 1
}
В данном примере мы оповещаем пользователя звуковым оповещением, но вы можете вывести всплывающее уведомление на рабочий стол. Можно запустить этот PowerShell скрипт как службу Windows.
Вы можете получить историю теневых подключений к компьютеру пользователя из журнала событий Windows. Все интересующие вас логи находятся в разделе Microsoft-Windows-TerminalServices-RemoteConnectionManager/Operational:Event Viewer
- Event ID 20508 — Shadow View Permission Granted
- Event ID 20503 — Shadow View Session Started
- Event ID 20504 — Shadow View Session Stopped
Вы можете получить логи теневых подключений к компьютеру с помощью PowerShell:
$EventIds = 20508,20503,20504
Get-WinEvent -FilterHashTable @{LogName='Microsoft-Windows-TerminalServices-RemoteConnectionManager/Operational';ID=$EventIds}
Функционал теневого подключения Remote Desktop Shadowing работает в Windows 11/10/ 8.1 и Windows Server 2022/2019/2016/2012 R2. Таким образом Remote Desktop Shadowing можно использовать как аналог Remote Assistance (Удаленный помощник) или TeamViewer/Anydesk для локальной или корпоративной сети.
Сам по себе функционал теневого подключения идет уже из коробки и доступен пользователям с правами администратора, но с некоторыми оговорками, о которых я скажу далее. Данная статья служит коротким и быстрым руководством для настройки теневого подключения к сеансам пользователей на терминальном сервере, а также предоставлению данного функционала обычным пользователям без прав администратора.
По умолчанию, для подключения требуется согласие пользователя. Если вы попытаетесь подключиться без запроса согласия — вам будет выдана ошибка. Иногда этот параметр необходимо изменить, чтобы можно было подключаться к сеансу без участия пользователя.
Изменение параметров удаленного управления
Чтобы настроить возможные параметры удаленного подключения (например, разрешить подключаться без запроса пользователя или запретить управление сеансом, предоставив только право на просмотр) необходимо изменить следующий параметр групповой политики:
Set rules for remote control of Remote Desktop Services user sessions
(Установить правила удаленного управления для пользовательских сеансов служб удаленных рабочих столов).
Найти его можно здесь:
Policies -> Administrative Templates -> Windows components -> Remote Desktop Services -> Remote Session Host -> Connections (Административные шаблоны –> Компоненты Windows –> Службы удаленных рабочих столов – Узел сеансов удаленных рабочих столов –> Подключения)
Данной политике соответствует DWORD параметр реестра Shadow в ветке HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services (значения этого параметра, соответствующие параметрам политики указаны в скобках).
Этой политикой можно настроить следующие варианты теневого подключения RD Shadow:
- No remote control allowed — удаленное управление не разрешено (значение параметра реестра Shadow = 0 );
- Full Control with users’s permission — полный контроль сессии с разрешения пользователя ( 1 );
- Full Control without users’s permission — полный контроль без разрешения пользователя ( 2 );
- View Session with users’s permission – наблюдение за сеансом с разрешением пользователя ( 3 );
- View Session without users’s permission – наблюдение за сеансом без разрешения пользователя ( 4 ).
Выдача прав на подключение обычным пользователям
На каждом сервере, где необходимо осуществлять подключения, необходимо выполнить следующую команду (запустить cmd или powershell от имени администратора):
wmic /namespace:\\root\CIMV2\TerminalServices PATH Win32_TSPermissionsSetting WHERE (TerminalName='RDP-Tcp') CALL AddAccount 'Domain\Group_Name',2
где
Domain — имя вашего домена
Group_Name — имя группы, в которой состоят пользователи, которым необходимо дать доступ
Материал написан на основе данной статьи:
https://winitpro.ru/index.php/2014/02/12/rds-shadow-v-windows-2012-r2/