Shadow-подключение в RDP: как увидеть экран пользователя
Всё, что вы видите на экране при обычном RDP-подключении — это не тот рабочий стол, который видит пользователь за своим монитором. Это копия, созданная специально для вас.
- собственное пространство процессов;
- отдельный экземпляр
explorer.exe; - свой набор переменных окружения;
- изолированный графический контекст.
Для администрирования серверов такое поведение удобно — вы не мешаете другим пользователям. Для технической поддержки оно превращается в препятствие: вы не видите проблему, которую пытаетесь решить.

Существует способ подключиться к уже работающей сессии без создания новой. В корпоративной среде это называется shadowing. Microsoft использует термин remote control of user sessions. Механизм позволяет администратору видеть и управлять тем же графическим контекстом, который видит пользователь, в реальном времени.
Чем подключение к активной сессии отличается от обычного RDP
Обычное RDP-подключение инициирует создание новой WinStation — объекта ядра Windows, управляющего графической сессией. Система загружает профиль пользователя, запускает оболочку explorer.exe, создаёт новое окружение рабочего стола. Происходит это даже если пользователь уже работает на том же компьютере. Результат — изолированное пространство процессов: тот же пользователь, те же права доступа, но совершенно другой набор запущенных приложений.
При shadow-подключении mstsc.exe работает иначе. Вместо создания новой WinStation он подключается к существующей, используя Session ID — числовой идентификатор, присвоенный сессии при входе пользователя. Графический вывод не дублируется, а разделяется. Вы видите точно то же изображение, которое формируется для монитора пользователя, с той же частотой обновления и теми же артефактами, если они есть.
Это различие критично для сценариев поддержки. Если у пользователя зависло приложение, отображается ошибка специфичного диалога или пропало сетевое подключение — вы увидите это в shadow-режиме. В обычном RDP вы увидите только свежую сессию, где всё работает нормально, потому что проблема существует в другом графическом контексте.
Почему при обычном RDP создаётся новая сессия пользователя
Архитектура Windows Terminal Services строилась на принципе сессионной изоляции ещё с версии Windows NT 4.0 Terminal Server Edition. Каждый входящий пользователь получает изолированное окружение по соображениям безопасности и стабильности. Если один пользователь запустит ресурсоёмкое приложение или вызовет сбой графической подсистемы, это не повлияет на сессии других пользователей.
При удалённом подключении система не знает, хотите ли вы подключиться к существующей сессии или создать новую. Технически одна учётная запись может иметь несколько активных сессий одновременно — например, локальную консольную и удалённую RDP. Поэтому по умолчанию создаётся новая сессия, чтобы избежать конфликтов и непреднамеренного разрыва существующих соединений.
Как подключиться к уже активной сессии и увидеть экран пользователя
Для подключения к существующей сессии используется тот же исполняемый файл mstsc.exe, что и для обычного RDP, но с дополнительными параметрами командной строки. Ключевой параметр — /shadow, после которого указывается числовой идентификатор целевой сессии.
Примеры команд:
mstsc /shadow:3 /v:COMPUTERNAME /control
mstsc /v:COMPUTERNAME /shadow:3 /control
Параметр /control необходим, если вы планируете управлять сессией. Без него подключение работает только для просмотра. Параметр не принимает значений: запись вида /control:3 приведёт к ошибке.
Когда shadow-подключение лучше обычного RDP
Shadow-подключение не заменяет обычный RDP, а дополняет его. Оно незаменимо в нескольких сценариях:
- Удалённая поддержка пользователей с сохранением контекста.
- Обучение и демонстрация действий на экране пользователя.
- Диагностика спорадических ошибок, воспроизводимых только в конкретной сессии.
Как подключиться через mstsc /shadow
Получение Session ID через qwinsta или quser
Для просмотра активных сессий можно использовать:
qwinsta /server:remote-pc
quser /server:remote-pc
Session ID находится в колонке ID.
Примеры подключения
Только просмотр:
mstsc /v:192.168.1.100 /shadow:3
Полное управление:
mstsc /v:192.168.1.100 /shadow:3 /control
Без запроса согласия пользователя:
mstsc /v:192.168.1.100 /shadow:3 /control /noConsentPrompt
Завершение shadow-сессии
Ctrl + * (звёздочка на цифровой клавиатуре) — прерывает подключение, но не завершает сессию пользователя.
Требования и права для shadow-подключения
Для Windows 8.1 / Server 2012 R2 и выше достаточно членства в группе Remote Desktop Users + разрешение на удалённое управление сессиями через групповую политику.
Настройка политики
Политика: Set rules for remote control of Remote Desktop Services user sessions
- 0 — удалённое управление запрещено полностью
- 1 — полный контроль с разрешения пользователя
- 2 — полный контроль без разрешения пользователя
- 3 — просмотр с разрешения пользователя
- 4 — просмотр без разрешения пользователя
Через реестр:
reg add "HKEY_LOCAL_MACHINESOFTWAREPoliciesMicrosoftWindows NTTerminal Services" /v Shadow /t REG_DWORD /d 2 /f
Проверка перед подключением
- Пользователь авторизован в системе
- Сессия активна (статус Active)
- У вас есть права администратора
- Политика shadowing разрешена
- Брандмауэр не блокирует RDP
Автоматизация через BAT и PowerShell
Пример BAT файла
@echo off
mstsc /v:%1 /shadow:3 /control /noConsentPrompt
Пример PowerShell скрипта
param(
[Parameter(Mandatory=$true)][string]$ComputerName,
[Parameter(Mandatory=$true)][string]$UserName,
[switch]$ViewOnly
)
$sessions = qwinsta /server:$ComputerName | ForEach-Object { ($_ -replace 's+', ' ').Trim() } | Where-Object { $_ -match $UserName -and $_ -match 'Active' }
if ($sessions.Count -eq 0) {
Write-Host "Активная сессия для пользователя $UserName не найдена" -ForegroundColor Red
exit 1
}
$sessionId = ($sessions[0] -split ' ')[2]
$arguments = @("/v:$ComputerName","/shadow:$sessionId","/noConsentPrompt")
if (-not $ViewOnly) { $arguments += "/control" }
Start-Process mstsc -ArgumentList $arguments
Write-Host "Подключение к сессии $sessionId на $ComputerName..." -ForegroundColor Green
Мониторинг shadow-подключений
События фиксируются в Event Viewer:
Applications and Services Logs → Microsoft → Windows → TerminalServices-RemoteConnectionManager → Operational
ID 20503 — начало shadowing
ID 20504 — завершение shadowing
Текущее количество подключений:
qwinsta /counter