Имя: Пароль:
1C
 
Как определить имя клиентского компьютера пользователя?
, ,
0 Dolphinbet
 
20.07.15
14:28
Пользователь работает в 1С в терминале, можно ли определить имя компьютера, с которого он подключился к терминалу?
1 Лефмихалыч
 
20.07.15
14:30
c:\>echo %clientname%
2 Маратыч
 
20.07.15
14:31
(0) Через 1С никак, разве что скрипт прикручивать внешний.
3 Dolphinbet
 
20.07.15
14:32
(1) угу, работает. Осталось это к 1С прикрутить...
4 eklmn
 
гуру
20.07.15
14:39
КомандаСистемы("echo %clientname%");
5 Feunoir
 
20.07.15
14:41
(3) Через WSH:
WHS = Новый COMОбъект("WScript.Shell");
ИмяКлиента = WHS.ExpandEnvironmentStrings("%CLIENTNAME%"));
6 Dolphinbet
 
20.07.15
14:43
ИмяКомпьютера = "";
WMI = ПолучитьCOMОбъект("winmgmts:{impersonationLevel=impersonate}!\\.\root\default:StdRegProv");
Для Инд = 1 По 20 Цикл
WMI.GetStringValue("2147483649", "Volatile Environment\"+Инд, "CLIENTNAME", ИмяКомпьютера);
Если ЗначениеЗаполнено(ИмяКомпьютера) Тогда
Прервать;
КонецЕсли;
КонецЦикла;
7 palpetrovich
 
20.07.15
14:53
(5) +1  я так делаю:
    WshShell = CreateObject("WScript.Shell");  
    РабочееМесто = WshShell.ExpandEnvironmentStrings("%clientname%");  
    Если Врег(РабочееМесто)="CONSOLE" Тогда
        РабочееМесто = ComputerName();
    КонецЕсли;
8 Dolphinbet
 
20.07.15
14:58
(7) да, вроде работает на терминале, а если локально то возвращает %CLIENTNAME% почему то
9 Dolphinbet
 
20.07.15
15:00
Всем спасибо!
10 palpetrovich
 
20.07.15
15:05
(8) эт старый код с базы на ХР, проверил на в7 действительно %CLIENTNAME% возвращает
11 qwerty
 
20.07.15
15:11
WshShell        = Новый COMОбъект("WScript.Shell");
        мИмяКомпьютера    = ВРег(СокрЛП(WshShell.Environment("Process").Item("Clientname")));
        
        Если ПустаяСтрока(мИмяКомпьютера) или мИмяКомпьютера = "CONSOLE" Тогда
            мИмяКомпьютера = ВРег(СокрЛП(ИмяКомпьютера()));
        КонецЕсли;
12 Dolphinbet
 
11.08.15
10:58
Прикольно - все эти методы перестали работать)
КомандаСистемы("echo %clientname%") теперь в терминале выдает просто CLIENT почему-то...
13 Злопчинский
 
11.08.15
11:02
%clientname% - это именно с какого компа ПОДКЛЮЧИЛСЯ к терминальной сесии? или с какого компа была СОЗДАНА терминальная сессия?
14 Dolphinbet
 
11.08.15
11:03
Перелогинился в терминал - заработало...
15 Dolphinbet
 
11.08.15
11:03
В общем странно как-то это все работает...
16 Dolphinbet
 
11.08.15
11:04
(13) а в чем разница?
17 Dolphinbet
 
11.08.15
11:04
Вообще, мне нужен комп с которого подключаюсь к терминальной сессии.
18 Злопчинский
 
11.08.15
14:36
(16) очевидно же... я подключился и ЗАПУСТИЛ терминальную сессию из дома. Отключился от терминальной сесии дома (но она осталась "живая"). Пришел в офис, сел за локальный комп, подключился к "живой" сессии - какой комп будет выдаваться по %clientname% - ???
19 HawkEye
 
11.08.15
14:41
(18) в XP и 2003 - было подобное, возвращал имя клиента который создал.. в дальнейшем исправили и сейчас должен возвращать имя текущего клиента, но я не проверял.
20 Гёдза
 
11.08.15
14:43
(18) винда не хранит информацию о том где создал сессию
21 HawkEye
 
11.08.15
14:47
+19   kb 281981
"When you reconnect to a disconnected Terminal Services session on a different computer from the one on which you originally established the connection, the ClientName variable retains the computer name of the computer on which you created the original session."
22 Dolphinbet
 
13.08.15
12:59
(21) Да, похоже так и есть.
То есть нужно поставить обновление, чтобы ClientName возвращал имя текущего клиента?
23 HawkEye
 
13.08.15
13:04
(22) ну если такие древние ОС используются как XP и\или 2003, то да. в следующих ОС я не сталкивался с необходимостью узнавать имя клиента
24 Dolphinbet
 
13.08.15
13:05
На терминале Виндоус Сервер 2003 стоит...
2 + 2 = 3.9999999999999999999999999999999...