Функция RDS Shadow (теневое подключение) в Windows Server и Windows 10 позволяет администраторам подключаться к активным RDP-сеансам пользователей для просмотра или управления их рабочим столом. Эта возможность доступна начиная с Windows Server 2012 R2 и Windows 8.1 (кроме Windows Server 2012 из-за изменений в стеке RDP). В статье описано, как настроить и использовать RDS Shadowing через mstsc.exe, Server Manager, PowerShell и скрипты, а также как делегировать права обычным пользователям.
Что такое RDS Shadowing?
RDS Shadow позволяет администратору подключиться к RDP-сеансу пользователя для наблюдения или управления. Основные параметры команды mstsc.exe для теневого подключения, например:
Mstsc.exe [/shadow:sessionID [/v:Servername] [/control] [/noConsentPrompt] [/prompt]]
— /shadow:sessionID: подключение к сеансу по ID
— /v:servername: имя RDS-сервера (по умолчанию — локальный хост)
— /control: включение управления (мышь, клавиатура)
— /noConsentPrompt: подключение без запроса согласия пользователя
— /prompt: использование другой учетной записи для подключения
Теневое подключение работает в домене Active Directory и рабочих группах. Права администратора на RDS-хосте не обязательны — их можно делегировать.
Подключение через графический интерфейс
1. Откройте Server Manager на RDS-сервере.
2. Перейдите в «Remote Desktop Services» -> выберите коллекцию (например, QuickSessionCollection).
3. В списке пользователей щелкните правой кнопкой по активной сессии и выберите «Shadow» (Теневая копия).
4. Укажите режим:
— View: только просмотр
— Control: управление сеансом
— Prompt for user consent: запрос согласия пользователя
Если сеанс в состоянии «Disconnected», подключение невозможно, появится ошибка:
«The specified session is not connected.»
При включенном запросе согласия пользователь увидит уведомление:
«softcomputers\administrator запрашивает удаленный просмотр вашего сеанса. Вы принимаете этот запрос?»
Если пользователь подтвердит подключение, то администратор увидит его рабочий стол в режиме просмотра, но не сможет взаимодействовать с ним.
Если пользователь отклонил административное Shadow RDS подключение, появится окно:
Для выхода из теневого режима нажмите Alt+* (на клиенте) или Ctrl+* (на сервере).
Настройка групповых политик для RDS Shadow
Настройка теневых подключений выполняется через групповую политику:
Политики -> Административные шаблоны -> Компоненты Windows -> Службы удаленных рабочих столов -> Узел сеансов удаленных рабочих столов -> Подключения -> Настройка правил удаленного управления сеансами служб удаленных рабочих столов
Соответствующий параметр реестра:
HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services\Shadow (DWORD).
Варианты настройки:
— 0: Удаленное управление запрещено
— 1: Полный контроль с разрешения пользователя
— 2: Полный контроль без разрешения
— 3: Просмотр с разрешения пользователя
— 4: Просмотр без разрешения
Примените политику:
gpupdate /force
Для точечной настройки используйте Group Policy Item Level Targeting.
Аудит теневых подключений
Для отслеживания RDS Shadow подключений включите журнал:
Microsoft-Windows-TerminalServices-RemoteConnectionManager/Operational.
Ключевые события:
— Event ID 20508: Разрешение на просмотр
— Event ID 20503: Начало теневого сеанса
— Event ID 20504: Завершение теневого сеанса
Теневое подключение через PowerShell
1. Получите список активных RDP-сеансов:
Get-RDUserSession | Format-Table Username, UnifiedSessionId, SessionState, HostServer, ApplicationType -GroupBy SessionState
2. Подключитесь к сеансу (например, ID 3):
mstsc /shadow:3 /control /noConsentPrompt
3. Для удаленного сервера:
mstsc /v:rdsh2:3389 /shadow:3 /control
Альтернативные команды для списка сеансов:
quser
qwinsta
query session /server:servername
Скрипты для упрощения подключения
Batch-скрипт (shadow.bat)
@echo off
set /P rcomp="Enter name or IP of a Remote PC: "
query session /server:%rcomp%
set /P rid="Enter RDP user ID: "
start mstsc /shadow:%rid% /v:%rcomp% /control
Сохраните в %Windir%\System32 и запускайте командой shadow.
PowerShell-скрипт с GUI (rdp_shadow_connection.ps1)
Add-Type -Assembly System.Windows.Forms
$Header = "SESSIONNAME", "USERNAME", "ID", "STATUS"
$dlgForm = New-Object System.Windows.Forms.Form
$dlgForm.Text = 'Session Connect'
$dlgForm.Width = 400
$dlgForm.AutoSize = $true
$dlgBttn = New-Object System.Windows.Forms.Button
$dlgBttn.Text = 'Control'
$dlgBttn.Location = New-Object System.Drawing.Point(15,10)
$dlgForm.Controls.Add($dlgBttn)
$dlgList = New-Object System.Windows.Forms.ListView
$dlgList.Location = New-Object System.Drawing.Point(0,50)
$dlgList.Width = $dlgForm.ClientRectangle.Width
$dlgList.Height = $dlgForm.ClientRectangle.Height
$dlgList.Anchor = "Top, Left, Right, Bottom"
$dlgList.MultiSelect = $False
$dlgList.View = 'Details'
$dlgList.FullRowSelect = 1
$dlgList.GridLines = 1
$dlgList.Scrollable = 1
$dlgForm.Controls.add($dlgList)
foreach ($column in $Header) {
$dlgList.Columns.Add($column) | Out-Null
}
$(qwinsta.exe | findstr "Active") -replace "^[\s>]" , "" -replace "\s+" , "," | ConvertFrom-Csv -Header $Header | ForEach-Object {
$dlgListItem = New-Object System.Windows.Forms.ListViewItem($_.SESSIONNAME)
$dlgListItem.Subitems.Add($_.USERNAME) | Out-Null
$dlgListItem.Subitems.Add($_.ID) | Out-Null
$dlgListItem.Subitems.Add($_.STATUS) | Out-Null
$dlgList.Items.Add($dlgListItem) | Out-Null
}
$dlgBttn.Add_Click({
$SelectedItem = $dlgList.SelectedItems[0] if ($SelectedItem -eq $null) {
[System.Windows.Forms.MessageBox]::Show("Выберите сессию для подключения")
} else {
$session_id = $SelectedItem.subitems[2].text
$(mstsc /shadow:$session_id /control)
}
})
$dlgForm.ShowDialog()
Для запуска скрипта настройте политику выполнения PowerShell:
Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy RemoteSigned
Данный скрипт отобразить графическую форму со списком активных RDP сеансов на локальном сервере. Вам останется только выбрать учетную запись пользователя и нажать Connect.
Делегирование прав на RDS Shadow
Чтобы разрешить теневые подключения непривилегированным пользователям (например, группе corp\AllowRDSShadow):
1. Запустите командную строку с правами администратора.
2. Выполните:
wmic /namespace:\\root\CIMV2\TerminalServices PATH Win32_TSPermissionsSetting WHERE (TerminalName='RDP-Tcp') CALL AddAccount 'corp\AllowRDSShadow',2
Значение 2 соответствует полному контролю.
Рекомендации
— Используйте /noConsentPrompt только при наличии соответствующих политик, чтобы избежать ошибок.
— Настройте аудит событий для отслеживания теневых подключений.
— Для отключенных сеансов сначала подключите пользователя к активной сессии.
— В доменной среде применяйте GPO для централизованного управления настройками.
— Тестируйте скрипты на локальном сервере перед развертыванием в продакшене.
RDS Shadow — мощный инструмент для управления RDP-сеансами в Windows Server 2016 и Windows 10. Используйте mstsc.exe, Server Manager или PowerShell для подключения, настраивайте политики для контроля доступа и делегируйте права непривилегированным пользователям. Скрипты упрощают процесс, делая управление сеансами удобным и эффективным.