PDA

Показать полную графическую версию : Узнать имя пользователя инициировавшего сеанс RDP


R@MZEZzz
08-02-2017, 15:17
Необходимо узнать имя пользователя инициировавшего сеанс RDP. Например:
RDP сервер на базе 2012R2, rdp_srv в домене corp.blabla.ru
Удаленные клиенты (рабочая группа) подключаются под доменными пользователями.
Комп Vasya, пользователь Pupkin, подключается к rdp_srv через стандартный mstsc, НО имя пользователя пишет corp\VPup
И работает на сервере под ним..
А мне нужно узнать имя, какое было у него на локальном компьютере - "Pupkin".
Это возможно как то реализовать? Вообще это имя передаётся ли на сервер при RDP подключении?
Подойдет любое решение, будь то скрипт\кусок кода и т.п.
Клиенты разные от winxp до win10. Если будет работать хотя бы с win10 - уже можно считать победой.
Буду признателен любой помощи

Elven
08-02-2017, 15:56
сколь мне известно передается только имя компьютера (%CLIENTNAME%), а почему пользователь не заходит под своей учетной записью?

R@MZEZzz
08-02-2017, 16:00
а почему пользователь не заходит под своей учетной записью? »
для этого придется создавать его дополнительно на сервере, а не в домене, а это влечет дополнительную цепочку неприятностей, будь то "прозрачный"(под текущим доменным пользователем) вход в 1с, применение политик на сервере для пользователя и т.д.

Elven
08-02-2017, 16:04
R@MZEZzz, вы не поняли вопрос, если пользователь заходит под своей доменной учеткой (под которой логинился локально) то и переменная %USERNAME% и команда whoami должны вернуть то же самое значение (т.е. одинаковое и на локальной машине и на той к которой он подключился по RDP). по каким причинам они могут не совпадать?

Iska
08-02-2017, 16:09
Нет, тут другой вопрос: почему пользователи работают локально под локальными учётными записями, а не под доменными?!

R@MZEZzz
08-02-2017, 16:31
Elven, Iska,
Пользователи удаленные (другой город) другая сеть, может быть даже другой домен (пока не встречалось)
а заходят на сервер в моём домене через интернет.
Пускать их в VPN или в мой домен нельзя, всё должно оставаться для них как есть на данный момент.
К тому же меняются они довольно часто, 3-5 пользователя в месяц (ротация). Зачем - не спрашивайте, я не вникал, мне лишь нужно настроить..

если пользователь заходит под своей доменной учеткой (под которой логинился локально) »
в том то и дело что логинился он с локальной, а заходит с доменной!
и мне с сервера надо узнать имя локальной...

вообще изначальная задача такая: Чтобы подключившийся пользователь, находясь на удаленном рабочем столе видел документы и папки своего родного локального рабочего стола, мог читать и писать в них.
Вручную задача решается сменой в реестре стандартных путей к раб столу\документам\загрузкам и т.д. на пути \\tsclient\c\users\<Имя локального пользователя>\Desktop\ и т.п. Сюда то мне имя и надо, чтобы автоматизировать весь этот процесс.
Можно конечно использовать "обходной" путь:
2 программы (скрипта), одна на клиенте, вторая на сервере.
Клиентская запускается единожды и сохраняет например в корень диска С: пути к Рабочему столу и т.д. в формате \\tsclient\C\users\....
Серверная запускается при логине пользователя, смотрит в его корень С: через \\tsclient\C\.. если есть файл с путями - пишет его в реестр, нет - пишет стандартные значения.
Но самый большой минус в необходимости запускать что то на клиенте. Задача - обойтись без этого.

Elven
08-02-2017, 17:13
Я, конечно, не уверен полностью так чтобы совсем, но именно от имени сервера узнать имя локальной учетки вряд ли получится. Разве что делать хитрый финт ушами, заставляя пользователей логиниться как-нибудь вот так:

echo %username% > //server/share/%computername%
mstsc.exe /v:server
Правда при этом придется расшарить на запись папку для пользователей не своего домена, что смотрится мне крайне нехорошим.

И потом уже в RDP сессии спрашивать, что находится в файле //server/share/%CLIENTNAME% и подставлять в те ключи которые нужно. Если использовать приведенный пример, то приблизительно так:
for /f %%i in (//server/share/%CLIENTNAME%) do (
echo \\tsclient\c\users\%%i\Desktop\
)

Вообще же при работе с RDS, если моя память не спит с другим, в системе видятся все диски как сервера так и клиента, или как в данном случае предоставляется доступ к RDP?

R@MZEZzz
08-02-2017, 23:06
Elven, ну смысл получается тот же что и я описал.
Но все равно спасибо за уделенное время!

R@MZEZzz
09-02-2017, 09:37
еще одна бредовая идея пришла, попробую так сделать:
программка на сервере, запускается при логине пользователя, сканирует папки пользователя в \\tsclient\c\users\ (или documents and settings)
Ищет в каждой из них (кроме all users и default) подпапку Desktop (Рабочий стол в случае winxp). и подсчитывает кол-во папок\файлов в ней.
Таким образом выделяем из них самую "увесистую", исключая "пустые" профили, что в 90% случаев и будет рабочим столом реального пользователя.
Конечно если пользователь не только что винду поставил и подключается к нам, тут надо экспериментировать...
В общем как вариант, костыль - но вариант :)

Elven
09-02-2017, 12:12
программка на сервере, запускается при логине пользователя, сканирует папки пользователя в \\tsclient\c\users\ (или documents and settings)
Ищет в каждой из них (кроме all users и default) подпапку Desktop (Рабочий стол в случае winxp). и подсчитывает кол-во папок\файлов в ней. »
От чьего имени запускается такая программа? Пользователь, от имени которого происходит подключение не имеет прав на ресурсы локальной машины, пользователь, залогиненный на локальной машине не имеет прав на ресурсы сервака. Здесь проблема не в написании скрипта, а в выдаче нужных разрешений. Причем я уже запутался где их нужно больше и где они будут кривее.
И еще, каким образом реализован сервер терминалов? Если прокинуть рабочий стол к рабочему столу нет возможности, то предоставить доступ к локальным дискам зачастую не только просто, но и идет "из коробки".




© OSzone.net 2001-2012