Теневое shadow подключение к RDP/RDS сеансам позволяет администраторам подключиться к сессии любого пользователя для просмотра рабочего стола пользователя и взаимодействия с ним. Режим Remote Desktop Shadowing (теневого подключения) работает во всех современных версиях Windows, начиная с Windows 2012 R2 и Windows 8.1 (кроме версии Windows Server 2012, в которой стек rdp перенесен из режима ядра в пользовательский режим). В этой статье мы рассмотрим, как настроить и использовать RDS Shadowing для подключения к RDP сессиям пользователей в Windows Server 2016 и Windows 10
В Windows Server 2016/Windows 10 в стандартном RDP клиенте (mstsc.exe) есть несколько специальных параметров, которые можно использовать для удаленного теневого (RDS Shadow) подключения к RDP сессии любого пользователя:
Mstsc.exe [/shadow:sessionID [/v:Servername] [/control] [/noConsentPrompt] [/prompt]]
- /shadow:sessionID – подключиться к RDP сессии пользователя по ID;
- /v:servername – можно указать имя удаленного хоста (RDP/RDS терминального сервера). Если имя сервера не указано, выполняется подключение к локальным сеансам на текущем хосте;
- /control – включает возможность взаимодействия с сеансом (рабочим столом) пользователя. Администратор может управлять мышкой пользователя, вводить данные с клавиатуры. Если эта опция не указана, используется режим просмотра сессии пользователя;
- /noConsentPrompt – опция позволяет администратору принудительно подключиться к любой сессии, не запрашивая у пользователя подтверждение на подключение;
- /prompt – позволяет использовать для подключения другую учетную запись, отличную от текущей. Запрашивается имя и пароль пользователя для подключения к сеансу.
Теневые сеансы можно использовать для подключения к сессиям пользователей на компьютерах и серверах как в домене Active Directory, так и в рабочей группе. Кроме того, не обязательно обладать правами администратора на RDS хосте, на котором работает пользователь. Администраторы могут делегировать полномочия RDS Shadowing любым, даже не-административных учетным записям (об этом ниже).
Использование Remote Desktop Shadow из графического GUI
Подключиться к сессии пользователя можно с помощью утилиты mstsc.exe или графической консоли Server Manager. Для этого в консоли Server Manager на RDS сервере перейдите в раздел Remote Desktop Services -> выберите свою коллекцию, например QuickSessionCollection.
В списке справа будет перечислен список пользователей у которых имеются сессии на данном RDS сервере. Щелкните правой кнопкой по сессии нужно пользователя, выберите в контекстном меню Shadow (Теневая копия).
Shadow Error - The specified session is not connected.
Появится окно c параметрами теневого подключения. Возможен просмотр (View) и управление (Control) сессией. Кроме того, можно включить опцию Prompt for user consent (Запрашивать согласие пользователя на подключение к сессии).
Если выбрана опция «Запрашивать согласие пользователя», в сессии у пользователя появится запрос:
Запрос на удаленное наблюдение/ Remote Monitoring Request Winitpro\administrator запрашивает удаленный просмотр вашего сеанса. Вы принимаете этот запрос?
Winitpro\administrator is requesting to view your session remotely. Do you accept the request?
Если пользователь подтвердит подключение, то администратор увидит его рабочий стол в режиме просмотра, но не сможет взаимодействовать с ним.
Если пользователь отклонил административное Shadow RDS подключение, появится окно:
Shadow Error: The operator or administrator has refused the request.
Если попытаться подключиться к сессии пользователя без запроса подтверждения, появится ошибка, сообщающая, что это запрещено групповой политикой:
Shadow Error: The Group Policy setting is configured to require the user’s consent. Verify the configuration of the policy settings.
Если вам нужно вести аудит RDS Shadow подключений к пользователям, используйте в качестве фильтра следующие события из журнала Microsoft-Windows-TerminalServices-RemoteConnectionManager/Operational:
- Event ID 20508: Shadow View Permission Granted
- Event ID 20503: Shadow View Session Started
- Event ID 20504: Shadow View Session Stopped
Групповые политики управления теневыми подключениями к RDS сессиям в Windows
Параметры удаленного управлениями RDS сессиями пользователя настраиваются отдельным параметром групповых политик — Set rules for remote control of Remote Desktop Services user sessions (Установить правила удаленного управления для пользовательских сеансов служб удаленных рабочих столов). Данная настройка находится в разделе Policies -> Administrative Templates -> Windows components -> Remote Desktop Services -> Remote Session Host -> Connections (Административные шаблоны –> Компоненты Windows –> Службы удаленных рабочих столов – Узел сеансов удаленных рабочих столов –> Подключения) в пользовательской и компьютерной секциях GPO. Данной политике соответствует 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
).
Вы можете настроить правила удаленного подключения в домене из консоли управления GPO
gpmc.msc
с помощью рассмотренного параметра политики, либо групповой политикой, вносящей изменения напрямую в реестр системы (последний вариант позволяет более тонко нацелить политику на компьютеры с помощью Group Policy Item Level Targeting).
Теневое подключение RDS Shadow из PowerShell
Воспользоваться функционалом теневого подключения к сессии пользователя через теневое подключение Remote Desktop Services можно и из Powershell.
В первую очередь нужно получить список пользовательских сессий на терминальном RDS сервере (сессии пользователей будут сгруппированы в группы в зависимости от их статуса):
Get-RDUserSession | ft Username, UnifiedSessionId, SessionState, HostServer, ApplicationType -GroupBy Sessionstate
На данном сервере мы обнаружили три активных RDP сессии пользователей. Чтобы подключиться к сессии пользователя с ID сессии 3, выполните команду:
Mstsc /shadow:3 /control /noConsentPrompt
Также для получения списка всех RDP сессии на сервере (или десктопной редакции Windows 10 к которой разрешены множественные RDP подключения) можно использовать команду:
quser
Или
qwinsta
На экране отобразится список RDP сессий, их ID и статус: активная сессия (Active) или отключенная (Disconnected).
Для получения списка сессий на удалённом сервере выполните команду:
query session /server:servername
Чтобы подключиться к сессии пользователя на удаленном сервере, используйте команду:
Mstsc /v:rdsh2:3389 /shadow:3 /control
Для более удобного теневого подключения к RDP сессиям пользователей можно использовать следующий скрипт. Скрипт предложит ввести имя удаленного компьютера и выведет список всех пользователей с активными RDP сеансами. Вам нужно будет указать ID сеанса, к которому нужно подключится через Shadow сессию:
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.
@echo off
set /P rcomp="Enter name or IP of a Remote PC: "
for /f "tokens=3 delims= " %%G in ('query session console /server:%rcomp%') do set rid=%%G
start mstsc /shadow:%rid% /v:%rcomp% /control
Также для теневого подключения можно использовать следующий PowerShell скрипт с простым графическим интерфейсом (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)
# Add columns to the ListView
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)
#[System.Windows.Forms.MessageBox]::Show($session_id)
}
}
)
$dlgForm.ShowDialog()
Данный скрипт отобразить графическую форму со списком активных RDP сеансов на локальном сервере. Вам останется только выбрать учетную запись пользователя и нажать Connect.
Вы можете использовать теневое подключение к пользователю не только в Windows Server с ролью Remote Desktop Services, но и для подключения к рабочим столам пользователей на компьютерах с Windows 10 .
Как разрешить обычном пользователям использовать теневое подключение?
В рассмотренных выше примерах для использования теневого подключения к RDP сессиям пользователей необходимы права локального администратора на RDS сервере. Однако вы можете разрешить использовать теневое (shadow) подключение и для непривилегированных пользователей (не предоставляя им прав локального администратора на компьютере/сервере).
К примеру, вы хотите разрешить членам доменной группы AllowRDSShadow использовать теневое подключение к RDP сессиям. Выполните команду в cmd.exe с правами администратора:
wmic /namespace:\\root\CIMV2\TerminalServices PATH Win32_TSPermissionsSetting WHERE (TerminalName='RDP-Tcp') CALL AddAccount 'corp\AllowRDSShadow',2
STATUS_BAD_IMPERSONATION_LEVEL
). Аналогичная проблема возникала и на RDS ферме на базе Windows Server 2016.Для решения проблемы нужно установить отдельные обновления:
- для Windows Server 2016 — KB4057142 (от 17 января 2018)
- для Windows Server 2012 R2 — KB4057401 (от 17 января 2018)
круто, но ты не написал самого главного — как активировать эту функцию =)
У меня её как не было, так и нет.
Хм, этот функционал идет прямо-из-коробки. Насколько я помню ничего включать не нужно. В статье речь идет о версии Windows 2012 R2, возможно ты проверял на простой Windows Server 2012.
Проверь, что в хелпе команды mstsc.exe /? имеется опция /shadow
да, ты прав. Прошу за невнимательность
Приветствую, протестировал, все прекрасно работает.Спасибо за знакомство.
нет такой функции. сервер 2012 r2
установлены роли — лицензирование удаленных рабочих столов
посредник подключений
узел сеансов удаленных рабочих столов
У меня тоже нет, но у меня не домен, а рабочая группа, а в ней как написано работать не будет.
Спасибо. Получилось. Работает. Но в отличие от 2008R2 не удается сделать сеанс на весь экран. Если у меня с пользователем одинаковые разрешения экрана, то теневой сеанс получается немного ужатым.
Есть такая проблема, но как правило, особых неудобств не вызывает
А если я удалил QuickSessionCollection, как мне можно подключаться к пользовательским сессиям из GUI?
Добрый день. Интересует если возможность также подключатся к пользователю(Shadow), только не на терминальном сервере, а на сервере Windows 2012 R2 Hyper-V. И рабочая станция Windows 7
Hyper-V это роль сервера для организации хоста с вируталками. Зачем туда постоянно подключаться?
Если же надо подключиться к одной из виртуалок, развернутых на Hyper-V, в режиме наблюдения за сеансом пользователя то вариант удаленный помощник.
«Remote Server Administration Tools (RSAT) позволяет администраторам управлять ролями и функциями на Windows Server 2008 R2 и Microsoft Server 2012 (Core & Full installation) с компьютера на базе Windows 7 и Windows 8 соответственно. RSAT для Windows 7 может работать только на версиях Enterprise, Professional или Ultimate и позволяет управлять Microsoft Hyper-V Server 2012, однако её функционал будет ограничен, в первую очередь будут недоступны новые настройки сети.»
Еще вариант 5nine Manager 4.0 for Hyper-V.
Так что попробовать поставить а там как получится.
Но все таки решение либо с удаленным помощником, либо с тем же VNC удобнее и проще.
Спасибо за отзыв
Сделал по Вашому совету — удаленный помощник.
Проверил у двух клиентов только что…
Итак — все настройки давно сделаны, но ранее точно помню работало так как надо:
На сервере — члене домена AD (но не скажу точно 2008/2008R2/2012) с ролью RDSH c с настройками как в вашей статье
На сервере RDSH я мог msra /offerRA БЕЗ СОГЛАСИЯ пользователей подключатся к их сеансу. А на клиентах — Win7 — согласие требовало. Но как бы этично — на сервере у них RemoteApp (1C) и там нет личной жизни.
Сейчас : изменилась версия — Server 2012R2 msra , настройки GPO в домене и настройки Локальной политики на самом Server 2012R2 RDSH позволяют «Полный контроль без разрешения клиента», но так как надо — без уведомления и разрешения работает только из GUI (Диспетчер серверов-Службы удаленных рабочих столов-Коллекции-Подключения нужный сеанс — правой клавишей Теневая копия)
Почему,
черт поберикарамба!, это перестал работать через msra работает, но запрашивает уведомление о подключений пользователя и потом разрешение на управление… то есть я запускаю в RDP сессии находясь по RDP на RDSH msra подключаюсь к нему-же (к серверу на котором нахожусь) выбираю сеанс пользователя — и у пользователя выскакивает — «Разрешить пользователю Админ подключение к вашему компьютеру»И совсем грустно, что mstsc /shadow:3 /control не работает — Ошибка теневого доступа Отказано в доступе.
Не понимаю. Ведь из GUI работает !!!
Так — все на так темно, есть светлый лучик
mstsc /shadow:3 /control /noConsentPrompt — и моментально, за 1 секунду видим и управляем пользовательской сессией — да, жаль что в маленьком окошке
В политиках стоит «Full Control without users’s permission» — полный контроль без разрешения пользователя.
Получаем список id сессий командой «qwinsta».
При попытке запустить «mstsc /shadow:3 /control /noConsentPrompt» получаю ошибку: Ошибка теневого доступа Отказано в доступе.
Выполнение команды «mstsc /shadow:3» приводт к такой же ошибке.
Подскажите в какую строну копать?
MSRA работает, но при условии что запрос на помощь примут!
мне хватило добавить /noConsentPrompt и заработало
Проверь. Должно быть так:
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp]
"fInheritShadow"=dword:00000000
"Shadow"=dword:00000002
А как вы из ГУИ запускаете теневое подключение?
Возможно ли такое подключение если у меня есть набор рдп файлов настроенных
Как это осуществить
mstsc /shadow:3 /control /noConsentPrompt — работает так как надо! Итого — осталось с MSRA разобраться, или понять, или простить…
Для удобства/быстроты подключения сделал простой ps-скриптик на раб.столе:
Write-Host »
»
quser
$user = Read-Host -Prompt »
Enter ID»
mstsc /shadow:$user /control /noConsentPrompt
PS
Команда quser выполняется моментально в отличие от долгодумающей Get-RDUserSession
При подключении и отключении от сеанса юзера, экран так же мигает как в 2008r2?
При попытке подключится в сессию пользователя через GUI — выдаёт: Неопознанная ошибка.
Есть идеи?
Подключаетесь с самого сервера? Права администратора имеются?
Подключаюсь с самого сервера от имени доменного админа. У меня несколько терминальных серверов в разных частях страны. Работает на всех, кроме одного. Такая же ошибка даже если запускать через консоль.
Я бы проверил все касающиеся политики и разрешения в свойствах RDP-Tcp подключения (с помощью консоли tsconfig.msc — https://winitpro.ru/index.php/2016/03/02/zapusk-osnastok-tsadmin-msc-i-tsconfig-msc-v-windows-server-2012-r2/).
Возможно стоит попробовать переставить роль RDS
Чтобы разрешить пользователям (членам определенной группы, например,corp\RDSSupport) без прав администратора подключаться к сессии других пользователей через shadow нужно выполнить такую команду:
wmic /namespace:\\root\CIMV2\TerminalServices PATH Win32_TSPermissionsSetting WHERE (TerminalName=»RDP-Tcp») CALL AddAccount «corp\RDSSupport»,2
Отсутствует пункт Shadow — таким образом подключившись, работающего пользователя выкидывает из сеанса. Совсем не айс.
А также нет выбора как подключаемся — для просмотра или управления. Только управление.
Сервер р2
1. В каком состоянии в результирующей политике правило Set rules for remote control of Remote Desktop Services user sessions.
2. У подключаещегося пользователя есть права администратора?
3. Подключаетесь из GUI или консолью mstsc с параметрами?
С гипера под управлением 2012R2 подключаюсь к виртуалке под Win7Pro такой командой(на виртуалке активен консольный сеанс):
mstsc /shadow:1 /v 192.168.222.50 /control /noConsentPrompt /prompt
Получаю сообщение:
«В версии Windows, установленной на этом сервере, не поддерживается теневой доступ пользователей».
Речь о самом гипере, т.е. ему не хватает установленных сервисов рабочих столов? Или чего-то не хватает виртуалке?
Это означает, что в версии Win7 не поддерживается теневой доступ.
И чего ей не хватает? Т.е. для Вин7 этот способ в принципе неработоспособен?
Да в win 7 теневое подключение работать не будет. Используйте Remote Assistance (https://winitpro.ru/index.php/2011/04/14/remote-assistance-v-windows-7/)
Столкнулся с проблемой: после отключения теневого подключения к пользователю, у пользователя исчезает языковая панель и не работает переключение раскладки клавиатуры.
Что можно сделать?
Если пользователь после отключения руками запустит ctfmon.exe, панель возвращается?
Попробуйте в панели управления того пользователя, к которому подключаетесь выставить галку Control Panel\All Control Panel Items\Language\Advanced settings -> Let me set a different input method for each app window.
Если не поможет, попробуйте в ветке HKLM\System\CurrentControlSet\Control\Keyboard Layout создать DWORD параметр IgnoreRemoteKeyboardLayout со значением 1.
У знакомого возникла такая же проблема. Нашёл что лечится удалением/добавлением языка и не нужно сессию завершать. И на форуме MS поднимается эта тема, но решения там нет. По идее должен быть какой-нибудь хотфикс. Лично у меня нет времени разбираться и искать что там залипает/повреждается. Сделал ему маленький скрипт — клац по ярлыку и языки переключаются. Если кто-то может написать официальный запрос в MS — создать трабл-тикет… Это проблема MS.
Тоже проблема с теневым подключение Server 2012 R2 после НГ не можем подключиться к людям, пишет не известная ошибка, все что есть в на всех сайтах все перепробовал, уже не знаю куда копать, может кто разобрался в чем проблема подскажет что нибудь.
Слишком мало информации, чтобы вам что-то подсказать.
Все-таки укажите дословно какая ошибка возникает (код). Есть ли какие-то ошибки/предупреждения в системных журналах, достаточно ли прав у подключающегося пользователя, ставились ли за это время какие-то обновления?
Кому интересно, обновление безопасности KB4056898, оно влияет за теневое подключение.Может и еще одно но это надо тестить если что опишусь
Тоже после последних обновлений на Server 2012 R2 перестал работать теневой доступ. пишет «Неопознанная ошибка». До обновлений все работало. В логах пусто.
Действительно, есть такая проблема: теневое подключение (RDS shadowing) в Windows Server 2012 R2 ломается после установки обновления KB4056898 ( патч Windows против Meltdown и Spectre ).
После установки обновления при попытке подключится к чужой сесии появляется ошибка «Unspecified error» (в логах ошибка STATUS_BAD_IMPERSONATION_LEVEL).
Аналогичная проблема на RDS Windows Server 2016
Для решения проблемы нужно установить фиксы:
для Windows Server 2016 — KB4057142 (от 17 января 2018)
для Windows Server 2012 R2 — KB4057401 (от 17 января 2018)
Подскажите, не подключается к клиентам windows10 1709×64. к 32-м битным все норм. обновления установлены накопительные от июня 2018. куда еще копать? встречал информацию, что после того как янарские обновления сломали RDS shadow, помогает только переустановка windows. это правда?
Проверял у себя — нормально подключается c Win Server 2012R2 на Win10x64 1709 и 1803 и между собой.
Последние кумулятивные обновления установлены? Проверяйте права, доступность портов на сетевом уровне, пробуйте отключить антвирус и файервол.
То же самое Windows 10 pro после обновления то же самое.
Теневое подключение неопознанная ошибка.
Откатить не могу новая система прилитело с месячным обновлением
Есть патч этой проблемы на 10?
Хоть и написано что в рабочей группе работать не будет.
У меня на одном из серверов рабтотает под один пользователем, но не работает под другим, хоть пользователи находятся в идентичных группах…
В чем может быть проблема?
Все выяснил…
нужно повершел с правами админа запускать.
как с одного диспетчера серверов настроить подключение к сеансам пользователей нескольких серверов RDS 2012R2 (брокера нет, просто отдельные сервера)
Не пробовал сам, но в теории у утилиты Mstsc есть параметр /v, позволяющий указать сервер, к которому нужно подключится.
Итоговая команда для теневого подключения можут выглядеть так:
Mstsc /v:msk-rdsh2:3389 /shadow:3 /control
Ругается на:
WHERE (TerminalName=”RDP-Tcp”)
хотя
C:\>wmic /namespace:\\root\CIMV2\TerminalServices PATH Win32_TSPermissionsSetting get TerminalName
выдаёт:
wmic /NameSpace:\\root\cimv2\TerminalServices PATH WIN32_TSPermissionsSetting.TerminalName="RDP-TCP" call AddAccount "Domain\user",X
Старая проблема — движок сайта коверкает кавычки. Заменил их на одинарные. Попробуйте так.
Та же проблема, ни с одинарными, ни с двойными не отрабатывает.
Для справки: Х в конце что значит? И чему может быть равен?
Я поставил 2 — работает
Добрый день! а можете дать информацию про эти скрипты в батнике, я новичок в этом… Правила написания и т. д.
Доброго времени!
Не пойму, в чем сложность…. Просто создаете на компьютере новый файл с расширением bat, открываете его в текстом редакторе и вставляете код скрипта. Сохраните bat файл и запустите его под админом. В консольном окне нужно будет ввести имя сервера и указать ID сесии пользователя, к которому нужно подключиться.
В общем запустите файл, и там разберетесь, ничего сложного.
win 10 -> win10 на некоторых компах работает на других после попытки подключения все пропадает, подскажите что могло случиться?
Какие логи смотреть?
Пропадает что, поясните?
В журнале System есть событие при подключении:
EventID 26: Application popup: Remote Control Request : CORP\username is requesting to control your session remotely. Do you accept the request?
События отключения не нашел….
Как сделать так что бы можно было дать техподдержке возможность подключаться к определенным сеансам без подтверждения?
К группе пользователей привязать политику Set rules for remote control of Remote Desktop Services user sessions = «Full Control without users’s permission » или в реестр пользователей прописать ключ HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services\Shadow =2.
Ну и подключаться с ключом /noConsentPrompt
Сенансы на RDS сервере?
К группе пользователей я так понимаю тех к кому подключаются. Да на RDS
Да, эта настройка для тех, к кому подключаются теневым сеансом.
Добрый день! Всё прекрасно работает! Но хочется ещё и чтобы звук можно было слышать. Пожалуйста, подскажите какие команды надо написать чтобы слышать звук от динамиков пользователя к которому подсоединился по Вашей методике.
При выполненни команды
wmic /namespace:\\root\CIMV2\TerminalServices PATH Win32_TSPermissionsSetting WHERE (TerminalName=’RDP-Tcp’) CALL AddAccount ‘corp\AllowRDSShadow’,2
вылетает ошибка Description = Generic failure
В чем может быть лажа
Server 2012R2
Проверьте, что группа corp\AllowRDSShadow существует в домене. Если группа не существует, у меня тоже появляется ошибка
Executing (\\TS-SRV\root\CIMV2\TerminalServices:Win32_TSPermissionsSettin
g.TerminalName="RDP-Tcp")->AddAccount()
ERROR:
Description = Generic failure
А если ошибка «Win32_TSPermissionsSetting — псевдоним не найден.»?
Похоже поврежден WMI класс или служба. Проверьте целостность ОС. Какая платформа?
Win Server 12R2
Теперь выдает следущее: PS C:\Users\ololo> wmic /namespace:\\root\CIMV2\TerminalServices PATH Win32_TSPermissionsSetting WHERE (TerminalName=
‘RDP-Tcp’) CALL AddAccount ‘lolo\Allow_RDS_Shadow’,2
TerminalName=RDP-Tcp : Имя «TerminalName=RDP-Tcp» не распознано как имя командлета, функции, файла сценария или выполня
емой программы. Проверьте правильность написания имени, а также наличие и правильность пути, после чего повторите попыт
ку.
строка:1 знак:86
+ … Setting WHERE (TerminalName=’RDP-Tcp’) CALL AddAccount ‘lolo\Allow_RDS_Shadow’,2
+ ~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : ObjectNotFound: (TerminalName=RDP-Tcp:String) [], CommandNotFoundException
+ FullyQualifiedErrorId : CommandNotFoundException
Через cmd надААА
можно пример что вводить в cmd?
С делегированием обычным пользователям прав на управление терминальной сессии все понятно. Но как сделать, чтобы эти пользователи не могли подключаться к админским сеансам?
Вы запускаете в powershell, а нужно в cmd.exe
Вот реальный пример
C:\Users\Admin>wmic /namespace:\\root\CIMV2\TerminalServices PATH Win32_TSPermissionsSetting WHERE (TerminalName='RDP-Tcp') CALL AddAccount 'TEST\First',2
Executing (\\SERVER\root\CIMV2\TerminalServices:Win32_TSPermissionsSetting.TerminalName="RDP-Tcp")->AddAccount()
Method execution successful.
Out Parameters:
instance of __PARAMETERS
{
ReturnValue = 0;
};
Интересно выходит:
С Win 7 с установленными патчами к Win 8.1 по Shadow подключась
А вот с Win 8.1 к Win 7 с установленными патчами подключиться не могу. Хотя при этом все настройки в реестре выставлены и я батником вижу сессию, к которой хочу зацепиться
Спасибо большое за статью.
Очень помогла информация о том, как добавить разрешение на теневой доступ для пользователей без прав администратора.
Хочу добавить, что это работает и для доменных и для локальных пользователей/групп терминала.
Например:
Есть терминальный сервер TS в домене kontora.local.
Группу AllowRDSShadow мы можем создавать как на контроллере домена (если пользователь, которому планируется давать теневой доступ, доменный) так и на самом сервере (т.е. создавать локальную группу, если планируется дать теневой доступ к сеансам локальному пользователю.).
В этих случаях параметр AddAccount в представленной команде нужно указывать следующим образом:
— для доменной группы: kontora\AllowRDSShadow
— для локальной группы: TS\AllowRDSShadow
После успешного выполнения команды wmic, сервер необходимо перезагрузить.
После добавления/удаления пользователя в/из группы AllowRDSShadow для отслеживания эффекта этому пользователю необходимо перезайти в сеанс, чтобы применились изменения списка групп.
Не удаётся подключаться к «свёрнутым» сеансам. То есть если пользователь просто свернул терминальное подключение, не блокируя и не закрывая его, то при попытке перехвата просто отображается серый экран. Как только окно RDP-подключения на пользовательском ПК разворачивается, сразу появляется возможность управления.
Никто не сталкивался? Как исправить?
Вопрос снят.
На клиентской машине необходимо отключить подавление графики в свёрнутом режиме:
В разделы
HKEY_LOCAL_MACHINE\Software\Microsoft\Terminal Server Client
HKEY_LOCAL_MACHINE\Software\Wow6432Node\Microsoft\Terminal Server Client
Добавить параметр DWORD с именем:
RemoteDesktop_SuppressWhenMinimized
Возможные значения:
1 = Suppress when minimized
2 = Do not suppress when minimized
Соответственно, ставим 2 и радуемся как я)
А есть подобное в GPO?
Обнаружилась ещё одна проблема.
Теневое подключение нормально не работает в случае мультимониторной конфигурации компьютера, если монитор, на котором открыто подключение по rdp, имеет вертикальную (книжную/портретную) ориентацию.
В этом случае теневое подключение открывается, и на чёрном фоне окна теневого подключения начинают появляться артефакты, какие часто бывают на выходящих из строя видеокартах. По этим артефактам видно, что система пытается построить изображение, но оно не перевёрнутое. Ожидание ни к чему не приводит.
Самое главное, что это не работает только в Windows 10. В Windows 7 все отлично перехватывается во всех ориентациях экрана. Пробовали разные версии драйверов, разные видеокарты и пр. На десятке не работает.
Если у кого-то есть возможность проверить данную ситуацию или вообще имеются какие-то мысли, прошу отозваться.
Не пробовал подключение к ПК с верткальной ориентацией монитора, но с мультимониторными компьютерами под Windows 10 действительно есть проблемы. То изображение слишком мелкое, то какие-то баги с картинкой.
Подскажите в чем проблема? Есть TS на базе WS2012R2, контроллер домена WS2008R2. На контроллере создана группа и в нее добавлен пользователь для теневого подключения на TS команда на добавление группы прошла успешно.
Теперь вопрос.
На машине с Win7Pro установлен RSAT (пользователь из той самой группы), там все сеансы видны но вот пункт меню «Удаленное управление» не активен. Помогите куда копать?
RSAT не причем. Вы сможете подключиться через теневое подключение к TS серверу на WS2012R2 с ПК под Windows 7, если установили на нее RDP клиент 8.1. Для подключения используйте команду mstsc.exe, а не оснаску TSADMIN.msc.
Не тестировал, но мне кажется, не получиться подключить в обратном направлении (Win2012r2->Win7).
RDP 8.1 на Win7 установлен, и через mstsc.exe подключение проходит, но некоторым ЛЮДЯМ это не удобно и они хотят через tsadmin, а там как раз пункт меню не активен.
Теневое подключение это функционал Windows 8.1 (2012 R2) и выше. Подключение к терминальной сесии через tsadmin от Windows 7 (2008 R2), это немного другая технология.
Вам проще сделать для пользователя простенький PowerShell скрипт для вывода всех терминальных сесий. Затем пользователь просто выбирает из списка сенанс, к которому нужно подключиться.
Пример скрипта:
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)
# Add columns to the ListView
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)
#[System.Windows.Forms.MessageBox]::Show($session_id)
}
}
)
$dlgForm.ShowDialog()
Спасибо, попробую.
Добрый день!
Под русскоязычную версию поправил тут qwinsta.exe | findstr «Активно».
Скрипт запускается, но табличная часть пустая.
Можете помочь?
2var. Думаю у вас проблема с кодировкой. Попробуйте сохранить файл PowerShell скрипта в кодировке UTF8.
Не выходит каменный цветок ((
надо отредактировать строку
$(qwinsta.exe |?{$_ -match "Активно"}) -replace "^[\s>]" -replace "\s+",","| ConvertFrom-Csv -Header $Header| ForEach-Object {
Помогите. Не видит сесий. Server2019
Добрый день!
В варианте Windows Server 2016 без Active Directory (обычная рабочая группа) все прекрасно работает через два файла:
Управление RDP сессией.bat
@echo off
query session
set /P rid=»Enter RDP user ID: »
start mstsc /shadow:%rid% /control /noConsentPrompt
Просмотр RDP сессии.bat
@echo off
query session
set /P rid=»Enter RDP user ID: »
start mstsc /shadow:%rid% /noConsentPrompt
Может кому пригодится. Спасибо за подсказки в комментариях (взял ваш опыт и собрал в один пост)!
Исправил:
Просмотр RDP сессии.bat
@echo off
query session
set /P rid=»Enter RDP user ID: »
start mstsc /shadow:%rid% /noConsentPrompt
Что-то я уже все перепробовал. Может что упустил? Что еще надо соблюсти чтобы это работало?
Тоже рабочая группа, домена нет.
Пользователи просто подключаются по rdp к серверу.
Смотрю по quser ID пользователя это же оно?
батник такой:
@echo off
query session
set /P rid=19:
start mstsc /shadow:%rid% /noConsentPrompt
Это правильно?
Выдает Ошибка теневого доступа: Указанный сеанс не подключен
хотя он подключен.
Разрешил еще в gpo как в статье.
Что не так то? 🙂
Попробуйте такой код для теневого подключения:
query session
set rid=19
start mstsc /shadow:%rid% /noConsentPrompt
А так отказано в доступе выдает.
А все нормально, спасибо 🙂
Надо его от админа запускать 🙂
Здравствуйте!
Мне схема работы на Windows Server 2008R2 нравилась больше:
1. Можно было отправить сразу нескольким пользователям сообщения
2. Можно было отключить\завершить сенас сразу группы пользователей.
Такой возможности в Windows Server 2012R2 через GUI я не увидел даже с правами админа. Или я что-то делаю не так?
Подключение к сессиям в 2008R2 и 2012R2 это разные технологии. Я согласен, что в 2008R2 все было гораздо удобнее. Но увы, приходится приспосабливаться к реализации теневого подключения в 2012r2 .
Добрый день.
Подскажите, пожалуйста, а в 2012 вообще никак нельзя подключиться к сессии пользователя? В групповой политике включено «полный контроль без разрешения пользователя». По gpresult показывает что политика работает. Но ничего не происходит — при правом щелчке по пользователю в диспетчере задач можно выбрать только «подключить» но тогда он запрашивает пароль пользователя.
Сервер просто 2012. не R2.
В Windows Server 2012 (не R2) теневое подключение не работает by design.
Спасибо за ответ. Подскажите, пожалуйста, получается что это в принципе невозможно или есть какие-либо варианты (патчи, заплатки, утилиты, etc)?
Скорее всего теневое подключение на 2012 не заработает ни при каких обстоятельствах. Обновляйтесь до более новой версии Windows Server. Либо посмотрите вариант с Remote Assistance, возможно вам получится как-то его задействовать в вашей конфигурации.
Прошу помощи, а то уже впадаю в отчаяние. Есть ферма из 4х хостов, есть 2 брокера (схема с повышенной доступностью). пробую из-под прав доменного админа. Запускаю шелл с повышенными правами. Команда Get-RDUserSession выдает список по всем хостам, все ок.
вот допустим есть вот такой сеанс:
UserName UnifiedSessionId SessionState HostServer ApplicationType
——— —————- ———— ———- —————
user15 281 STATE_ACTIVE term2.local rdpinit.exe
Запускаю «Mstsc /shadow:281 /control», получаю ошибку «Ошибка теневого доступа. Идентификация сеанса не определяет допустимый сеанс»/. Из GUI все работает ок.
не подскажите куда копать?
Вы локаьно на сервере подключение запускаете? Попробуйте имя сервера указать:
start mstsc /v:term2.local /shadow:281 /noConsentPrompt
запускаю с брокера. в любом другом месте невозможно получить список всех сессий фермы (в ферме 4 терминальных хоста). конечная цель дать возможность разработчикам подключаться к пользователям для помощи. Соответственно, они не могут бегать по всем 4м серверам в поисках сессии нужного пользователя.
PS потрите полное доменное имя в моем и вашем сообщениях, усталый вечером был, не усмотрел. спасибо
слушайте, а помогло указание имени сервера.
Т.е. сперва я получаю список сессий, в списке видно на какой терминалке сеанс. затем запускаю mstsc /v:сервер /shadow:xxx /control и вуаля!
Спасибо вам огромное за сайт и статьи!
осталось разобраться как сделать так, чтобы работало не только с брокера и не только от админа, продолжаю копать
Здраствуйте!
когда пользователю разрешено теневое подключение, как можно запретить подключатся к сессиям Администратора, или же скрыть сессии?
Если вы разрешили пользователям подключаться к rds сессиям других пользователей (зачем?) с помощью команды
wmic /namespace:\\root\CIMV2\TerminalServices PATH Win32_TSPermissionsSetting WHERE (TerminalName='RDP-Tcp') CALL AddAccount 'corp\AllowRDSShadow',2
Как самый простой вариант для ограничения теневых подключения к сессиям пользователей можно использовать только подключение с появлением запроса (подтверждением) — Full Control with users’s permission.
Либо настройка разных политик с настройками Set rules for remote control of Remote Desktop Services user sessions для разных групп пользователей.
>>Либо настройка разных политик с настройками Set rules for remote control of Remote Desktop Services user sessions для разных групп пользователей.
>>
А можно поподробнее ?
подходит второй вариант, как его организовать к примеру что бы пользователя Admin не могли просматривать?
Вам нужно на админа применить отдельную локальную политику с нужными настройками Full Control with users’s permission. Посмотрите здесь:
_https://superuser.com/questions/134066/how-to-apply-group-policy-settings-to-specific-local-accounts-in-windows
мне кажется это вообще не то.
там ограничения идут на самого Админа, а мне не нужно его ограничивать. мне нужно ограничить к НЕМУ доступ в режиме Shadow
Добрый день.
Существует ли возможность предоставить пользователям без привилегий администратора права на ЗАВЕРШЕНИЕ удалённого сеанса?
Опытным путём пришёл к тому, что оказывается добавление юзера в группу AllowRDSShadow, разрешает ему не только теневое подключение но и выполнение команды logoff, что очень радует. Вопрос снят.
Подключение к shadow rdp нормально работает в локальной сети. Можно ли подключиться к ПК за nat? на маршрутизаторе стоит переадресация 2014 порт на 3389. По rdp подключаюсь нормально, а вот shadow rdp не работает
Снаружы подключаться через теневое подключение не вариант — нужно открывать rpc диапазон. Совсем несекьюрно.
Как компромиссный вариант, держать за nat отдельный сервер\компьютер с доступным rdp портом, и с него уже подключаться через shadow внутрь сети.
Ok, понял. Shadow rdp это по сути не протокол rdp , а rpc
В файерволе нужно открыть rpc, Список портов RPC в Windows:
netsh int ipv4 show dynamicport tcp
+ открыть 445 tcp
Если не открывать
qwinsta /server:{ADDRESS}
Error 1722 getting sessionnames
Error [1722]:The RPC server is unavailable.
Доброго времени суток.У меня Windows Server 2012 r2.
Пытаюсь подключиться к пользователю с помощью Mstsc /shadow:id /noConsentPrompt все ок, но это просто просмотр.А каким образом к нему подключиться, чтобы не спрашивало его и был доступ к управлению,а не только просмотр?
Для подключения в режиме управления теневой сессией и без запроса пользователя используйте команду:
Mstsc /shadow:id /noConsentPrompt /control
Спасибо большое) помогло!Я думал, использовать параметры /noConsentPrompt и /control нельзя вместе.
Так и не получилось
Ошибка
«В версии Windows, установленной на этом сервере, не поддерживается теневой доступ пользователей»
Служба работает
GPO настроено и работает
на обоих стоит Win10 1909
Куда копать ,
Скорее всего у вас домашняя версия Windows (Home / Single Language) или что-то подобное. Вам скорее всего придется пользоваться чем то из этого : https://winitpro.ru/index.php/2015/09/02/neskolko-rdp-sessij-v-windows-10/
Такая же ерунда, на одних машинах работает на других нет, наблюдается проблема на версиях Pro как 8.1 так и 10, найти сходу различие между машинами на которых работает и на которых пишет ошибку, не смог…
Настройки параметра Shadow в реестре проверяли? RDP везде включен?
Да, сравнивал, на тех куда подключается и куда нет, одинаковые, получают из одной и той же GP.
Добрый день. Про R2 2012 все понятно. А как быть с 2012 без R2 ? Мелкомягкие вырезали там этот функционал. И получается фигня. На сервере сидит 30 пользователей к примеру. Как взаимодействовать с сеансом? Сервер не в домене, в рабочей группе. Никак получается?
Не знаю, будет ли работать в Windows Server 2012 Remote Assistance, но как вариант — попробуйте. Через теневое подключение получается никак.
Пробовал, не канает, тк комп не в домене. А поднимать домен, где 80 процентов машин на линуксе, нафиг надо. Вообщем видимо никаких вариантов нету. Кроме как непосредственно подключаться к машине пользователя прогами типа NoMachine и RMS
wmic /namespace:\\root\CIMV2\TerminalServices PATH Win32_TSPermissionsSetting WHERE (TerminalName=’RDP-Tcp’) CALL AddAccount ‘corp\AllowRDSShadow’,2
Да! Это работает на конкретном компьютере после его перезагрузки (перезапуска службы RDP)
1. А как это включить на всех компьютерах домена?
2. Как просмотреть список «назначенных» на конкретном компе групп которым разрешен Shadow?
1) Логон скриптом
2) Не нашел вменяемого способа посмотреть текущий состав групп с правами Shadow. Пришлось запускать WMI explolore и руками смотреть содержимое класса Win32_TSPermissionsSetting
Вот есть еще vbs скрипт для сброса настроек на дефолтные:
set RDPObj = GetObject("winmgmts:{impersonationLevel=impersonate}!Win32_TSPermissionsSetting.TerminalName='Console'")RDPobj.RestoreDefaults
или через командную строку wmic:
PATH WIN32_TSPermissionsSetting.TerminalName="Console" call RestoreDefaults
Добрый день!
Всё по статье получилось, работает.
Но вот необходимо, чтобы и звук весь пробрасывался через такое «тихое незаметное» подключение (крысу ловим)
Есть ли возможность?
Политиками в Device and Resource Redirection включено редирект и запись звука, но не работает
Возможно ли вообще?
Не уверен, что со теневое подключение в принципе умеет забирать звук. На стандартных настройках это не работает. Вероятно вам что-то более продвинутое нужно…
Аудит подключений RDS Shadow
Журнал: Microsoft-Windows-TerminalServices-RemoteConnectionManager/Operational
Event id 20510: Предоставлено разрешение на теневое управление
Event id 20506: Запущено теневое управление сеансом
Event id 20507: Остановлено теневое управление сеансом
Спасибо за статью.
Вопрос имеется сервер 2019 без AD. Настроил подключение к юзерам через батник все шикарно работает. Но бывают нюансы когда надо зайти к юзеру в сессию и что то сделать когда сессия не активна реально ли это сделать или только поднимать AD и полноценный терминал сервер ?
В неактивную rds сессию не зайти.
Поправка: к отключенному сеансу можно подключиться через taskmgr если он запущен от учётной записи SYSTEM (в помощь утилитка psexec от Sysinternals, ключи «-s -i»)
Давно не пользуюсь теневым режимом.
Есть более удобная вещь.
Litemanager server ставишь на сервер.
Litemanager viewer добавляешь сервер.
Подключается и выбираешь в списке нужного пользователя. Удобно с удаленного компа подключаться. Плюс куча всего полезного ещё.
Народ, подскажите, может у кого была данная трабла:
При подключении к сессии rdp пользователя, через теневую копию — управление (без согласия пользователя) — выскакивает ошибка «согласно настройкам групповой политики требуется просмотр прав доступа» , в политиках стоит параметр «разрешение подключения без согласия». Добавлю, на просмотр сеанса работает, а вот управление нет…
Mstsc /shadow:id /noConsentPrompt /control — та же ошибка…
Соответствующий раздел групповых политик:
Конфигурация компьютера — Политики — Административные шаблоны — Компоненты Windows — Службы удаленных рабочих столов — Узел сеансов удаленных рабочих столов — Подключения — Устанавливает правила удаленного управления для пользовательских сеансов служб удаленных рабочих столов
Параметр должен быть включён в состояние: Полный контроль без разрешения пользователя.
Спасибо, но этот параметр политики выставил сразу же, но проблема походу не в нем.
В новых виндах запретили подключение без запроса.
Еще одно «улучшение».
Случайно не нашлось решения для новых ОС? уже второй день мучаю
Напишите, в каких версиях теневое подключение работает не так, как раньше.
В 2019 вроде не было изменений…
Речь о WS2022/Windows 11?
В этой версии — подключение без подтверждения не работает.
Версия: 10.0.19043.1052 (21H1)
Кто нибудь знает Win10 — где теневое подключение работает без разрешения пользователя?
1. Есть ли команда для пользователя с которым было установлено теневое подключение типа quser, чтобы можно было понять за ним наблюдают или нет?
2. Есть ли для телефона клиентское ПО с помощью которого можно было бы совершить теневое подключение к удалённому компьютеру?
Скрипт хороший
Но кто поможет подправить немного его
Задача в следующем
есть список с именами компьютеров к которым пользователи могут подключаться, и нужно с каждого узнать какой сеанс у пользователя — консоль или rdp.
Как вот дописать цикл чтобы проверка была по всем компам со списка а потом вывела результат сюда же в окно
Привет всем! Подскажите:
AD, терминалки, в GPO прописано управление сеансами пользователя без подтверждения
При теневом подключении к сеансу, не появляется окно с сансом,
если сделать запрос на подключение с разрешения пользователя появляется окно с разрешением после нажатия ДА пользователем тоже не появляется окно с сеансом, как пофиксить?
Вопрос снят, пытался подключится без установленной службы удаленных рабочих столов
Я вот такой скрипт надыбал и перевел под рус винды. Работает и для пк и для терминалов.
Назвать можно так ShadowRDP_control.ps1
запускать можно так
powershell.exe -windowStyle hidden -File «c:\Adm\ShadowRDP\ShadowRDP_control.ps1» -RDSServerName %HOST%
где %HOST% имя или ip компа
# Define RDS Host here
Param(
[array]$RDSServerName
)
Function SetupForm {
[void] [System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")
[void] [System.Reflection.Assembly]::LoadWithPartialName("System.Drawing")
$objForm = New-Object System.Windows.Forms.Form
$objForm.Text = "Shadow RDP Менеджер"
$objForm.Size = New-Object System.Drawing.Size(480,480)
$objForm.StartPosition = "CenterScreen"
$objForm.MaximizeBox = $False
$objForm.ShowInTaskbar = $True
$ApplyButton = New-Object System.Windows.Forms.Button
$ApplyButton.Location = New-Object System.Drawing.Size(45,400)
$ApplyButton.Size = New-Object System.Drawing.Size(80,23)
$ApplyButton.Text = "Выполнить"
$objForm.Controls.Add($ApplyButton)
#Execute ScriptActions function when Apply is clicked
$ApplyButton.Add_Click(
{
foreach ($objItem in $objListbox.SelectedItems)
{$script:x += $objItem}
$MessageText = $objMessageTextBox.Text
$WaitTime = $objWaitforText.Text
ScriptActions
})
$CancelButton = New-Object System.Windows.Forms.Button
$CancelButton.Location = New-Object System.Drawing.Size(180,400)
$CancelButton.Size = New-Object System.Drawing.Size(75,23)
$CancelButton.Text = "Отмена"
$CancelButton.Add_Click({$objForm.Close()})
$objForm.Controls.Add($CancelButton)
$RefreshButton = New-Object System.Windows.Forms.Button
$RefreshButton.Location = New-Object System.Drawing.Size(315,400)
$RefreshButton.Size = New-Object System.Drawing.Size(75,23)
$RefreshButton.Text = "Обновить"
$objForm.Controls.Add($RefreshButton)
$RefreshButton.Add_Click(
{
UpdateList
})
$objLabel = New-Object System.Windows.Forms.Label
$objLabel.Location = New-Object System.Drawing.Size(10,20)
$objLabel.Size = New-Object System.Drawing.Size(380,20)
$MyLabelText = "{0,-15} {1,35} {2,20} {3,20}" -f "Логин", "Сервер", "ID сессии", "Статус сессии"
$objLabel.Text = $MyLabelText
$objForm.Controls.Add($objLabel)
$objListBox = New-Object System.Windows.Forms.ListBox
$objListBox.Location = New-Object System.Drawing.Size(10,50)
$objListBox.Size = New-Object System.Drawing.Size(450,20)
$objListBox.Height = 220
$objListBox.SelectionMode = "MultiExtended"
$objLabelMessage = New-Object System.Windows.Forms.Label
$objLabelMessage.Location = New-Object System.Drawing.Size(10,315)
$objLabelMessage.Size = New-Object System.Drawing.Size(280,20)
$objLabelMessage.Text = "Сообщение для отправки:"
$objForm.Controls.Add($objLabelMessage)
$objMessageTextBox = New-Object System.Windows.Forms.TextBox
$objMessageTextBox.Location = New-Object System.Drawing.Size(10,335)
$objMessageTextBox.Size = New-Object System.Drawing.Size(260,20)
$objMessageTextBox.enabled = $false
$objForm.Controls.Add($objMessageTextBox)
$objLabelTime = New-Object System.Windows.Forms.Label
$objLabelTime.Location = New-Object System.Drawing.Size(10,270)
$objLabelTime.Size = New-Object System.Drawing.Size(200,20)
$objLabelTime.Text = "Задержка выполнения (сек):"
$objForm.Controls.Add($objLabelTime)
$objWaitforText = New-Object System.Windows.Forms.TextBox
$objWaitforText.Location = New-Object System.Drawing.Size(10,290)
$objWaitforText.Size = New-Object System.Drawing.Size(70,20)
$objForm.Controls.Add($objWaitforText)
$objCheckSendMessage = New-Object System.Windows.Forms.CheckBox
$objCheckSendMessage.Location = New-Object System.Drawing.Size(10,350)
$objCheckSendMessage.Size = New-Object System.Drawing.Size(100,30)
$objCheckSendMessage.Text = "Сообщение"
$objForm.Controls.Add($objCheckSendMessage)
$objCheckSendMessage.Add_CheckStateChanged({
$objMessageTextBox.enabled = $objCheckSendMessage.Checked
$objCheckDisconnect.Checked = $false
$objCheckLogOff.Checked = $false
$objMirrorSession.Checked = $false
})
$objCheckLogOff = New-Object System.Windows.Forms.CheckBox
$objCheckLogOff.Location = New-Object System.Drawing.Size(110,350)
$objCheckLogOff.Size = New-Object System.Drawing.Size(115,30)
$objCheckLogOff.Text = "Завершить сеанс"
$objForm.Controls.Add($objCheckLogOff)
$objCheckLogOff.Add_CheckStateChanged({
$objCheckDisconnect.Checked = $false
$objCheckSendMessage.Checked = $false
$objCheckDisconnect.Checked = $false
})
$objCheckDisconnect = New-Object System.Windows.Forms.CheckBox
$objCheckDisconnect.Location = New-Object System.Drawing.Size(230,350)
$objCheckDisconnect.Size = New-Object System.Drawing.Size(100,30)
$objCheckDisconnect.Text = "Отключить"
$objForm.Controls.Add($objCheckDisconnect)
$objCheckDisconnect.Add_CheckStateChanged({
$objCheckLogOff.Checked = $false
$objCheckSendMessage.Checked = $false
$objMirrorSession.Checked = $false
})
$objMirrorSession = New-Object System.Windows.Forms.CheckBox
$objMirrorSession.Location = New-Object System.Drawing.Size(340,350)
$objMirrorSession.Size = New-Object System.Drawing.Size(110,30)
$objMirrorSession.Text = "Теневой сеанс"
$objForm.Controls.Add($objMirrorSession)
$objMirrorSession.Add_CheckStateChanged({
$objCheckLogOff.Checked = $false
$objCheckSendMessage.Checked = $false
$objCheckDisconnect.Checked = $false
})
$objForm.Controls.Add($objListBox)
$objForm.Topmost = $False
$objForm.Add_Shown({$objForm.Activate()})
[void] $objForm.ShowDialog()
}
Function SendMessage {
ForEach ($x in $objListBox.SelectedItems) {
$x = $x.Split("`t")
$RDSUser = $x[0].Trim()
$RDSHost = $x[1].Trim()
$RDSSessionID = $x[2].Trim()
Send-RDUserMessage -HostServer $RDSHost -UnifiedSessionID $RDSSessionID -MessageTitle "Сообщение от $env:username" -MessageBody "$MessageText"
}
}
Function Disconnect {
ForEach ($x in $objListBox.SelectedItems) {
$x = $x.Split("`t")
$RDSUser = $x[0].Trim()
$RDSHost = $x[1].Trim()
$RDSSessionID = $x[2].Trim()
Disconnect-RDUser -HostServer $RDSHost -UnifiedSessionID $RDSSessionID -Force
}
}
Function LogOff {
ForEach ($x in $objListBox.SelectedItems) {
$x = $x.Split("`t")
$RDSUser = $x[0].Trim()
$RDSHost = $x[1].Trim()
$RDSSessionID = $x[2].Trim()
Invoke-RDUserLogoff -HostServer $RDSHost -UnifiedSessionID $RDSSessionID -Force
}
}
Function MirrorSession {
# Проверка версии mstsc version должно быть больше 6.3.9600
#$mstsc_version = [System.Diagnostics.FileVersionInfo]::GetVersionInfo("C:\Windows\System32\mstsc.exe").Fileversion
#If ($mstsc_version -NotMatch "10.0.14393.1358") {
# [System.Windows.Forms.MessageBox]::Show("Не совместимая версия клиента RDP!")
# return
#}
ForEach ($x in $objListBox.SelectedItems) {
$x = $x.Split("`t")
$RDSUser = $x[0].Trim()
$RDSHost = $x[1].Trim()
$RDSSessionID = $x[2].Trim()
$RDSSessionActive = $x[3].Trim()
If($RDSSessionActive -ne "Активно") {
[System.Windows.Forms.MessageBox]::Show("Сессия $RDSUser не активна.")
return
}
# Убрать /noConsentPrompt чтоб был запрос у прользователя. /Control - для управления
$params = @("/v:$RDSHost /shadow:$RDSSessionID /Control /noConsentPrompt")
$RemControl = @{
"FilePath" = "mstsc.exe"
"ArgumentList" = $params
"NoNewWindow" = $true
"Wait" = $false
}
Start-Process @RemControl
}
}
Function UpdateList {
[void] $objListBox.Items.Clear()
$objListBox.BeginUpdate()
ForEach ($Computer in $RDSServerName) {
quser /server:$Computer 2>&1 | Select-Object -Skip 1 | ForEach-Object {
$CurrentLine = $_.Trim() -Replace '\s+',' ' -Split '\s'
$HashProps = @{
UserName = $CurrentLine[0]
ComputerName = $Computer
}
# If session is disconnected different fields will be selected
If ($CurrentLine[2] -eq 'Disc' -Or $CurrentLine[2] -eq 'Getr.') {
$HashProps.Id = $CurrentLine[1]
$HashProps.State = $CurrentLine[2]
} else {
$HashProps.Id = $CurrentLine[2]
$HashProps.State = $CurrentLine[3]
}
New-Object -TypeName PSCustomObject -Property $HashProps
$strOutput1 = $HashProps.UserName
$strOutput2 = $Computer
$strOutput3 = $HashProps.Id
$strOutput4 = $HashProps.State
$strOutput = "{0,-15} {1,25} {2,3} {3,15}" -f $strOutput1, $strOutput2, $strOutput3, $strOutput4
[void] $objListBox.Items.Add($strOutput)
}
}
$objForm.Controls.Add($objListBox)
$objListBox.EndUpdate()
}
Function ResetButtonValues {
$objCheckLogOff.Checked = $false
$objCheckSendMessage.Checked = $false
$objCheckDisconnect.Checked = $false
$objMirrorSession.Checked = $false
}
Function ScriptActions {
#This function contains the actions to take depending on the selections set by the user
If($objCheckSendMessage.Checked -eq $true) {
$ApplyButton.Text = "Выполнение"
$ApplyButton.BackColor = "Red";
Start-Sleep -Seconds $waittime
SendMessage
ResetButtonValues
$ApplyButton.Text = "Apply"
$ApplyButton.BackColor = "Transparent"
}
If($objCheckLogOff.Checked -eq $true) {
$ApplyButton.Text = "Applying"
$ApplyButton.BackColor = "Red";
Start-Sleep -Seconds $waittime
LogOff
ResetButtonValues
Start-Sleep -Seconds 5
$ApplyButton.Text = "Обновление"
UpdateList
$ApplyButton.Text = "Выполнить"
$ApplyButton.BackColor = "Transparent"
}
If($objCheckDisconnect.Checked -eq $true) {
$ApplyButton.Text = "Выполнение"
$ApplyButton.BackColor = "Red";
Start-Sleep -Seconds $waittime
Disconnect
ResetButtonValues
$ApplyButton.Text = "Обновление"
Start-Sleep -Seconds 3
UpdateList
$ApplyButton.Text = "Выполнить"
$ApplyButton.BackColor = "Transparent"
}
If($objMirrorSession.Checked -eq $true) {
$ApplyButton.Text = "Выполнение"
$ApplyButton.BackColor = "Red";
Start-Sleep -Seconds $waittime
MirrorSession
ResetButtonValues
$ApplyButton.Text = "Выполнить"
$ApplyButton.BackColor = "Transparent"
}
}
$script:x =@()
#Imports Remote Desktop module
Import-Module RemoteDesktop
#Runs the script
SetupForm
открываю, у меня пустое всё, активные пользователи есть на терм. сервере, а сессии не показывает.
это было так из поста о control но там заменили строку msts. и заработало, а у вас всё пустое( но это пол беды) у меня без разрешения не даёт подключаться(
Кто сталкивался с тем что на некоторых терминальных серверах, теневое подключение показывает якобы начало сессии и сразу обрывается
В логах пусто, подключаюсь от доменного админа к обычному пользователю
Как будто-то было что-то похожее. При повторном подключении к сессии коннетк проходит?
иногда да, иногда нет
бывает ошибка теневой доступ к указанному сеансу невозможен поскольку к этому сеансу уже выполняется теневой доступ
А если я запускаю данный скрипт от имени админа локально на том же сервер где находится юзверь всегда подключается нормально
Когда с другого пк-примерно также как из графической оснастки server manager(бывает все ок а бывает что показывает якобы начало сессии и сразу обрывается
0
@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 /noConsentPrompt
Когда запускаю скрипт rdp_shadow_connection.ps1 на Windows Server 2016 из поста, то открывается только оснастка Session Connect без активных сессий(а они есть). Работаю под учётной записью доменного админа. Что не доделал, коллеги?
Можете подсказать, почему запускается оснастка без активных сессий? все сервера 2016,пробовал на разных
При чем на 2012R2 работает, показывает список активных сессий на 2016\2019 пустой список…
скрипт для вывода всех терминальных сесий не работает на 2016\2019
надо отредактировать строку
$(qwinsta.exe |?{$_ -match «Активно»}) -replace «^[\s>]» -replace «\s+»,»,»| ConvertFrom-Csv -Header $Header| ForEach-Object {
помогло, только Строка статус с иероглифами
Проблема не связана, с тем что у вас на 2019 стоит русская версия, а на 2012r2 — английская.
Я работаю только с en версиями windows server, русских просто под рукой нет, поэтому скрипты не тестируются на них.
Подскажите, в чем тогда проблема ?
в 2019 en — работает исправно, в ru не отображает список
но и подмена строк не помогает, однако пользуясь quser\qwinsta отдельно выводит информацию со сбитой кодировкой
PS Microsoft.PowerShell.Core\FileSystem:c$\123> QUSER
ЏЋ‹њ‡Ћ‚Ђ’…‹њ ‘…ЂЌ‘ ID ‘’Ђ’“‘ Ѓ…‡„…‰‘’‚. ‚ђ…Њџ ‚•Ћ„Ђ
rdp-tcp#48 5 ЂЄвЁў® 1:51 28.07.2022 9:04
rdp-tcp#47 11 ЂЄвЁў® . 28.07.2022 8:33
rdp-tcp#50 12 ЂЄвЁў® . 28.07.2022 9:09
13 „ЁбЄ 8 28.07.2022 10:54
PS Microsoft.PowerShell.Core\FileSystem::c$\123> qwinsta
‘…ЂЌ‘ ЏЋ‹њ‡Ћ‚Ђ’…‹њ ID ‘’Ђ’“‘ ’€Џ “‘’ђ-‚Ћ
services 0 „ЁбЄ
console 1 Џ®¤Є«о祮
rdp-tcp#48 5 ЂЄвЁў®
>rdp-tcp#47 11 ЂЄвЁў®
rdp-tcp#50 12 ЂЄвЁў®
я бы с удовольствием использовал en версию, но боюсь пользователи и 1сники меня сожрут
Вот тут интересная статья по то, как шпионить с помощью rdp shadowing _https://blog.bitsadmin.com/blog/spying-on-users-using-rdp-shadowing
Добрый день. Подскажите пожалуйста. Теневое подключение к рдп НЕ Администратора на локальной машине без домена как организовать?
Для локального компьютера все аналогично.
Давно пора использовать litemanager. Там и к сессиям подключаться модном многое другое.
тут, еще больше странностей начинается ))
Оставил строку в покое, пошел гуглить как поменять аутпут на UTF-8, по вашему совету выше и о чудо получилось, но теперь пишет, что недостаточно прав, хотя с cmd никаких проблем нет, что могло пойти не так?
[Console]::OutputEncoding = [System.Text.Encoding]::GetEncoding(«utf-8»)
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)
# Add columns to the ListView
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)
#[System.Windows.Forms.MessageBox]::Show($session_id)
}
}
)
$dlgForm.ShowDialog()
Прошу прощения, капча зависла, обновился, уже два комментария оставил.
В итоге мой запрос не актуален, для меня сработал нижний вариант, не хватало группы на проверяемой учетке, не проверил, все работает, спасибо.
Всем привет!
Есть RDS-ферма (Шлюз, брокер, хосты) на базе Windows 2022 в которой опубликованнa парочка приложений.
При попытке покдлючиться к сеансу RemoteApp вижу курсор и черный екран ((
В полноценном РДП-сеансе все ОК.
Как побороть такое поведение ??
Пишут что вроде как нельзя подключаться к сессии remoteapp
_https://microsoftplatform.blogspot.com/2011/01/remote-control-rds-session-in-mixed_26.html
Можно из менеджера как обычно.
Я не могу побороть проблему, в Gpedit указал полный контроль без разрешения, обновил политики через ком. строку. при подключении пишет что согласно политике я не могу это сделать, если с запросом подключаться то работает, что не так я уже не пойму,всё везде разрешил, подключаюсь через ПоверШел.
Привет. Такой вопрос. У меня в разделе Policies -> Administrative Templates -> Windows components -> Remote Desktop Services -> Remote Session Host -> Connections было сконфигурировано никак, т.е. параметр не был задан. Я проверил командой qwinsta состояние, и мне показало мой username и ID = 5.
После этого я сконфигурировал данную настройку на запрет любых удаленных подключений, перезагрузил компьютер. Снова посмотрел qwinsta, и теперь мне показало мой username и ID = 1.
Значит ли это, что до запрета любых удаленных подключений у меня было активное удаленное подключение к моей сессии?
Я почти чайник в этом. Объясните по-русски, пожалуйста 🙂
ID это просто уникальный номер вашей сессии, вы переключились и он сменился. теневые подключения тут не при чем.
Вот такая у меня интересная штука происходит:
Имеется Windows 10 два компа. У обоих установлен RDPWrapper.
Сделал всё по инструкции, подключение по RDP работает. Но.. У одного ПК всё работает как должно, а вот у второго проблема следующего характера. Он не показывает первую сессию (т.е. ту, которую запустил активный пользователь на самом ПК). При выполнении команды qwinsta пользователя просто нет. Остальные сессии показывает без проблем и к ним Я могу подключиться по shadow тоже без каких либо проблем. А вот к первой нет. А на другом ПК всё работает нормально. Файрвол отключал вообще полностью и всё равно не работало. Пробовал всякое, но ничего не сработало. Есть идеи?
1) Подскажите, можно ли ограничить по времени удаленное подключение по /shadow:?
Ну, т.е. клиент Win10/11 подключается к другому Win10/11 для просмотра и, чтобы тот, кто подключился автоматически отключался через XX-время.
2) И ещё вопрос: тот к кому подключились, может принудительно порвать 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 ).
а нет в реестре таких параметров…. server 2016
через gpedit.msc есть
Добрый день!
А как добиться, чтобы команда qwinsta.exe выполнялась для удаленного сервера без прав администратора?
То есть я простой пользователь на своем ПК, мне сперва нужно получить список сессий на удаленном сервере. Но команда qwinsta.exe не выполняется без прав администратора на этом сервере. Сперва необходимо запустить cmd.exe от имени УЗ имеющей права администратора на этом удаленном сервере и только потом команда покажет сессии.
Пробовали команду
wmic /namespace:\\root\CIMV2\TerminalServices PATH Win32_TSPermissionsSetting WHERE (TerminalName='RDP-Tcp') CALL AddAccount 'corp\AllowRDSShadow',2
Или в случае исопльзования CIM объекта (в новых версиях PowerShell, где wmi объекты не доступны)Ж
$Cim = Get-CimInstance -Namespace root/cimv2/terminalservices -ClassName Win32_TSPermissionsSetting -Filter 'TerminalName="RDP-Tcp"'
Invoke-CimMethod -InputObject $Cim -MethodName AddAccount -Arguments @{AccountName = 'DOMAIN\User'; PermissionPreSet = 2}
Возможные значения:
1 — права пользователя, вход, подключение к своей сессии
2 — — вот это дает админские права на управление RDP сессиями, в том числе query через qwinsta