Автор | Сообщение |
|
| |
Пост N: 633
Зарегистрирован: 17.06.10
|
|
Отправлено: 06.01.22 14:37. Заголовок: Идентификатор сессии
Приветствую ! Как можно узнать идентификатор текущей RDP-сессии ?
|
|
|
Ответов - 37
, стр:
1
2
All
[только новые]
|
|
|
| |
Пост N: 7529
Зарегистрирован: 17.05.05
|
|
Отправлено: 06.01.22 15:51. Заголовок: Копай https://social..
|
|
|
|
| постоянный участник
|
Пост N: 7198
Зарегистрирован: 12.09.06
|
|
Отправлено: 11.01.22 09:58. Заголовок: Вопрос немного не в ..
|
|
|
|
| |
Пост N: 7530
Зарегистрирован: 17.05.05
|
|
Отправлено: 11.01.22 14:56. Заголовок: Andrey Не в туда ко..
|
|
|
|
| постоянный участник
|
Пост N: 7199
Зарегистрирован: 12.09.06
|
|
Отправлено: 11.01.22 15:28. Заголовок: Спасибо Dima ! :sm3..
Спасибо Dima ! Буду разбираться...
|
|
|
|
| |
Пост N: 7531
Зарегистрирован: 17.05.05
|
|
Отправлено: 11.01.22 22:16. Заголовок: Andrey Отпиши о рез..
Andrey Отпиши о результате если не сложно Получилось или нет.....
|
|
|
|
| постоянный участник
|
Пост N: 7201
Зарегистрирован: 12.09.06
|
|
Отправлено: 27.01.22 14:17. Заголовок: Dima пишет: Отпиши ..
Dima пишет: цитата: | Отпиши о результате если не сложно |
| Всё руки не доходили до этого... Начал пробовать и сразу затык ! А как узнать что моя прога запускается на сервере терминалов ?
|
|
|
|
| |
Пост N: 7564
Зарегистрирован: 17.05.05
|
|
Отправлено: 27.01.22 15:23. Заголовок: win_OsIsTSClient()..
win_OsIsTSClient()
|
|
|
|
| |
Пост N: 7565
Зарегистрирован: 17.05.05
|
|
Отправлено: 29.01.22 16:26. Заголовок: Andrey пишет: сколь..
Andrey пишет: цитата: | сколько клиентов подключилось к серверу (RDP-сессии) или список логинов RDP-сессий |
| Пробуй вроде норм пашет... Уверен что есть и другие способы это узнать через WMI , но надо с запросами разбираться а времени нет. Proc main LOCAL oWMI LOCAL objWMI LOCAL oTerminal LOCAL objItem Local Ocosver Local elem local it:=0 REQUEST HB_CODEPAGE_RU1251 hb_cdpSelect( "RU1251" ) ? "win_OsIsTSClient()",win_OsIsTSClient() objWMI:=WmiService() objWMI:Security_:ImpersonationLevel:=3 objWMI:Security_:AuthenticationLevel:=6 Ocosver:= objWMI:InstancesOf ("Win32_OperatingSystem") for each elem in Ocosver ? elem:name next oTerminal:= objWMI:ExecQuery("Select * from Win32_LogonSession Where LogonType=10" ) ? "Number of terminal sessions ",oTerminal:count FOR EACH objItem IN oTerminal ? "objItem:LogonId", objItem:LogonId ? "objItem:StartTime", objItem:StartTime // objItem:Name и остальные фишки почему то возвращают NIL next wait RETURN ******************* FUNC WMIService( cComp ) Local oWmi ,oLocator hb_default(@cComp,'.') BEGIN SEQUENCE WITH {| oErr | Break( oErr ) } oLocator:= win_oleCreateObject( "wbemScripting.SwbemLocator" ) oWMI:= oLocator:ConnectServer(cComp,"ROOT\CIMV2") End SEQUENCE RETURN oWmi
|
|
|
|
| |
Пост N: 7566
Зарегистрирован: 17.05.05
|
|
Отправлено: 29.01.22 20:25. Заголовок: Вот еще вариантик ..
Вот еще вариантик oTerminal:= objWMI:ExecQuery("Select * from Win32_LogonSession Where LogonType=10" ) FOR EACH objItem IN oTerminal ? id:=objItem:LogonId userlist:=objWMI:ExecQuery("ASSOCIATORS OF {Win32_LogonSession.LogonId="+id+"} WHERE AssocClass=Win32_LoggedOnUser Role=Dependent") for each elem in userlist ? elem:name next next
|
|
|
|
| |
Пост N: 7567
Зарегистрирован: 17.05.05
|
|
Отправлено: 29.01.22 20:53. Заголовок: Dima пишет: ? elem..
Dima пишет: Вот тут еще можно отслеживать Status (elem:Status) Status Только для чтения. Текущий статус объекта. Может принимать следующие значения: "OK" "Error" "Degraded" "Unknown" "Pred Fail" "Starting" "Stopping" "Service"
|
|
|
|
| постоянный участник
|
Пост N: 7202
Зарегистрирован: 12.09.06
|
|
Отправлено: 29.01.22 21:48. Заголовок: Спасибо БОЛЬШОЕ ! :..
Спасибо БОЛЬШОЕ ! В инете только много пишут вот так - ("Select * from Win32_LogonSession Where LogonType = 2 OR LogonType = 10") Только в этой функции действительно нельзя получить имена пользователей в RDP-сессии А мне юзеру нужно выдать список кто ещё к серверу за логинился.
|
|
|
|
|
| |
Пост N: 7568
Зарегистрирован: 17.05.05
|
|
Отправлено: 29.01.22 22:26. Заголовок: я подумаю Andrey ког..
я подумаю Andrey когда время появится , много надо для этого гуглить так как в WMI я тоже не особо силен.......
|
|
|
|
| |
Пост N: 7569
Зарегистрирован: 17.05.05
|
|
Отправлено: 29.01.22 22:27. Заголовок: Andrey пишет: Тольк..
Andrey пишет: цитата: | Только в этой функции действительно нельзя получить имена пользователей в RDP-сессии |
| имена есть смотри внимательней и ниже по коду
|
|
|
|
| постоянный участник
|
Пост N: 7203
Зарегистрирован: 12.09.06
|
|
Отправлено: 29.01.22 22:45. Заголовок: Dima пишет: имена е..
Dima пишет: цитата: | имена есть смотри внимательней и ниже по коду |
| Да увидел ! Писал уже после того как ты добавил. Спасибо !
|
|
|
|
| |
Пост N: 7570
Зарегистрирован: 17.05.05
|
|
Отправлено: 29.01.22 23:10. Заголовок: Andrey Собери EXE и..
Andrey Собери EXE из исходника , запусти на серванте и все увидишь. Там код cамодостаточный для сборки.
|
|
|
|
| постоянный участник
|
Пост N: 7204
Зарегистрирован: 12.09.06
|
|
Отправлено: 29.01.22 23:13. Заголовок: Да, сделал пока так...
Да, сделал пока так. Работает однако ! Кому интересно - Скрытый текст
/* * MINIGUI - Harbour Win32 GUI library Demo 28-01-2022 * * Copyright 2022 Dima - http://clipper.borda.ru/?32-dima * * Сколько клиентов подключилось к серверу (RDP-сессии) или список логинов RDP-сессий ? * How many clients connected to the server (RDP sessions) or a list of RDP session logins? */ #define _HMG_OUTLOG #include "hmg.ch" REQUEST HB_CODEPAGE_RU1251 ANNOUNCE RDDSYS ///////////////////////////////////////////////////////////////////// PROCEDURE MAIN(cComp) LOCAL cLog, aRet DEFAULT cComp := "" SET EPOCH TO ( Year(Date()) - 50 ) SET LANGUAGE TO RUSSIAN SET CODEPAGE TO RUSSIAN SET Date TO GERMAN cLog := ChangeFileExt( Application.ExeName, ".log" ) DELETEFILE(cLog) SET LOGFILE TO &cLog // set filename for debug output to file SET WINDOW MAIN OFF ? REPL("= ",20) + "program Start " + HB_TSTOSTR( hb_DateTime() ) + REPL(" =",20) cComp := IIF( LEN(cComp) == 0, GetComputerName(), cComp ) ? "Computername:", cComp ? "Current user:", GetUserName() ? " OS:", wmiOsver(cComp) ? "Where is the program running ? RDP session:", win_OsIsTSClient() //IF win_OsIsTSClient() aRet := HmgLogonSession(cComp) ? "hmgLogonSession()=", aRet, HB_ValToExp(aRet) //ENDIF ? "." ; ? "=== End ===" ShellExecute( 0, "Open", cLog,,, 1 ) RETURN ///////////////////////////////////////////////////////////////////// FUNCTION WMIService( cComp ) LOCAL oWMI ,oLocator DEFAULT cComp := "." BEGIN SEQUENCE WITH {| oErr | Break( oErr ) } oLocator:= win_oleCreateObject( "wbemScripting.SwbemLocator" ) oWMI:= oLocator:ConnectServer(cComp,"ROOT\CIMV2") END SEQUENCE RETURN oWMI ///////////////////////////////////////////////////////////////////// // какая версия на компе FUNCTION wmiOsver(cComp) LOCAL cRet, objWMI, Ocosver, elem cRet := "" objWMI := WmiService(cComp) objWMI:Security_:ImpersonationLevel := 3 objWMI:Security_:AuthenticationLevel := 6 Ocosver := objWMI:InstancesOf ("Win32_OperatingSystem") FOR EACH elem IN Ocosver cRet += elem:name + CRLF NEXT RETURN cRet ///////////////////////////////////////////////////////////////////// // Функция, позволяющая получить информацию о терминальных сессиях // на сервере (локальный/удаленный компьютер). // Рекомендация: // Перед применением проверить на компьютерах // Windows Management Instrumentation (WMI): // 1. Состояние служб. // 2. Разрешение в брандмауэре. // FUNCTION hmgLogonSession(cComp) LOCAL aRet, objWMI, nI, elem, oTerminal, objItem, userlist, id DEFAULT cComp := "." nI := 0 aRet := {} ? REPL("-",40) objWMI := WmiService(cComp) objWMI:Security_:ImpersonationLevel := 3 objWMI:Security_:AuthenticationLevel := 6 oTerminal := objWMI:ExecQuery("Select * from Win32_LogonSession Where LogonType=10") FOR EACH objItem IN oTerminal // objItem:Name и остальные фишки почему то возвращают NIL ? " Caption ", objItem:Caption ? " Description ", objItem:Description ? " InstallDate ", objItem:InstallDate ? " Name ", objItem:Name ? " Status ", objItem:Status ? " StartTime ", objItem:StartTime ? " AuthenticationPackage ", objItem:AuthenticationPackage ? " LogonId ", objItem:LogonId ? " LogonType ", objItem:LogonType if !empty(objItem:LogonId) nI++ endif ? REPL("-",40) NEXT ? "Number of terminal sessions:",nI ? REPL("-",40) FOR EACH objItem IN oTerminal id := objItem:LogonId userlist := objWMI:ExecQuery("ASSOCIATORS OF {Win32_LogonSession.LogonId="+id+"} WHERE AssocClass=Win32_LoggedOnUser Role=Dependent") FOR EACH elem IN userlist AADD( aRet, elem:name + " Status:" + elem:Status ) NEXT NEXT RETURN aRet
|
|
|
|
|
| |
Пост N: 7571
Зарегистрирован: 17.05.05
|
|
Отправлено: 29.01.22 23:43. Заголовок: Andrey Ну вот и отл..
Andrey Ну вот и отлично когда не ленишься
|
|
|
|
| |
Пост N: 7572
Зарегистрирован: 17.05.05
|
|
Отправлено: 30.01.22 13:03. Заголовок: Можно еще через Wtsa..
Можно еще через Wtsapi32.dll пробнуть
|
|
|
|
| постоянный участник
|
Пост N: 7205
Зарегистрирован: 12.09.06
|
|
Отправлено: 30.01.22 13:31. Заголовок: Dima пишет: Можно е..
Dima пишет: цитата: | Можно еще через Wtsapi32.dll пробнуть |
| Это как ?
|
|
|
|
| |
Пост N: 7573
Зарегистрирован: 17.05.05
|
|
Отправлено: 30.01.22 13:56. Заголовок: Andrey пишет: Это к..
|
|
|
|
| постоянный участник
|
Пост N: 7206
Зарегистрирован: 12.09.06
|
|
Отправлено: 30.01.22 16:18. Заголовок: Andrey пишет: Да, с..
Andrey пишет: цитата: | Да, сделал пока так. Работает однако ! |
| НЕ РАБОТАЕТ !!! Если запускать под учёткой пользователя - то НЕ работает ! Если запускать под учёткой администратора, то работает. Блин, опять засада.
|
|
|
|
|
| |
Пост N: 7576
Зарегистрирован: 17.05.05
|
|
Отправлено: 30.01.22 16:43. Заголовок: Andrey пишет: Если ..
|
|
|
|
| постоянный участник
|
Пост N: 7207
Зарегистрирован: 12.09.06
|
|
Отправлено: 30.01.22 16:54. Заголовок: Dima пишет: ну так ..
Dima пишет: цитата: | ну так зашей L/P админа там где подключение идет в ConnectServer |
| В твоём примере нет ConnectServer ! Как это можно добавить ?
|
|
|
|
| |
Пост N: 7577
Зарегистрирован: 17.05.05
|
|
Отправлено: 30.01.22 17:00. Заголовок: Andrey пишет: В тво..
Andrey пишет: цитата: | В твоём примере нет ConnectServer ! |
| Dima пишет: цитата: | oWMI:= oLocator:ConnectServer(cComp,"ROOT\CIMV2") |
| а это что ? может пример не тот смотришь ?
|
|
|
|
| постоянный участник
|
Пост N: 7208
Зарегистрирован: 12.09.06
|
|
Отправлено: 30.01.22 17:01. Заголовок: Dima пишет: а это ч..
Dima пишет: Где логин и пароль добавить ?
|
|
|
|
| |
Пост N: 7578
Зарегистрирован: 17.05.05
|
|
Отправлено: 30.01.22 17:04. Заголовок: Andrey пишет: Где л..
Andrey пишет: цитата: | Где логин и пароль добавить ? |
| Ты трезвый вообще ? oWMI:= oLocator:ConnectServer(cComp,"ROOT\CIMV2",логинТУТ,пассТУТ) ведь ссылку на доку же дал
|
|
|
|
| постоянный участник
|
Пост N: 7209
Зарегистрирован: 12.09.06
|
|
Отправлено: 30.01.22 17:29. Заголовок: Dima пишет: ведь сс..
Dima пишет: цитата: | ведь ссылку на доку же дал |
| objwbemServices = .ConnectServer( _ [ ByVal strServer ], _ [ ByVal strNamespace ], _ [ ByVal strUser ], _ [ ByVal strPassword ], _ [ ByVal strLocale ], _ [ ByVal strAuthority ], _ [ ByVal iSecurityFlags ], _ [ ByVal objwbemNamedValueSet ] _ ) Смутил параметр [ ByVal strNamespace ] Спасибо ! Буду пробовать.
|
|
|
|
| |
Пост N: 7579
Зарегистрирован: 17.05.05
|
|
Отправлено: 30.01.22 18:14. Заголовок: Andrey пишет: Смути..
Andrey пишет: цитата: | Смутил параметр [ ByVal strNamespace ] |
| strNamespace – задаем пространство имен (например, root\CIMV2), если оно отсутствует, то будет взято пространство по умолчанию (оно прописано в реестре в ветке HKLM\SOFTWARE\Microsoft \WBEM\Scripting\ Default Namespace)
|
|
|
|
| постоянный участник
|
Пост N: 7211
Зарегистрирован: 12.09.06
|
|
Отправлено: 31.01.22 13:43. Заголовок: Dima пишет: oWMI:= ..
Dima пишет: цитата: | oWMI:= oLocator:ConnectServer(cComp,"ROOT\CIMV2",логинТУТ,пассТУТ) |
| Если логин и пароль неправильны, то прога вылетает с ошибкой. Error BASE/1004 Метод не экспортирован: SECURITY_ Args: [1] = U --------------------------------- Stack Trace --------------------------------- Called from SECURITY_(0) Called from WMILOGONSESSION(114) in module: hmgLogonSession.prg Called from MAIN(45) in module: hmgLogonSession.prg Как узнать что логин и пароль подошли на этом сервере ? Если админ поменяет пароль, то прога будет просто вылетать. С админом всегда трудно договориться. Они частенько меняются на фирме.
|
|
|
|
| |
Пост N: 7580
Зарегистрирован: 17.05.05
|
|
Отправлено: 31.01.22 15:43. Заголовок: Andrey пишет: Как у..
Andrey пишет: цитата: | Как узнать что логин и пароль подошли на этом сервере ? |
| я думаю что примерно так BEGIN SEQUENCE WITH {| oErr | Break( oErr ) } oLocator:= win_oleCreateObject( "wbemScripting.SwbemLocator" ) oWMI:= oLocator:ConnectServer(cComp,"ROOT\CIMV2", Login , pass) if !hb_isobject(oWMI) ? "Что то пошло не так :)" ? hb_valtoexp(oWmi) Owmi:=NIL endif Recover // тут тоже можно что то чекануть END SEQUENCE
|
|
|
|
| постоянный участник
|
Пост N: 7212
Зарегистрирован: 12.09.06
|
|
Отправлено: 31.01.22 15:56. Заголовок: Вообщё хрень получае..
Вообщё хрень получается. Сегодня пример перестал работать. Вот пример - Скрытый текст
/* * MINIGUI - Harbour Win32 GUI library Demo 28-01-2022 * * Copyright 2022 Dima - http://clipper.borda.ru/?32-dima * * Сколько клиентов подключилось к серверу (RDP-сессии) или список логинов RDP-сессий ? * How many clients connected to the server (RDP sessions) or a list of RDP session logins? */ #define _HMG_OUTLOG #include "hmg.ch" REQUEST HB_CODEPAGE_RU1251 ANNOUNCE RDDSYS ///////////////////////////////////////////////////////////////////// PROCEDURE MAIN LOCAL oWMI, objWMI, oTerminal, objItem, Ocosver, elem, cLog SET EPOCH TO ( Year(Date()) - 50 ) SET LANGUAGE TO RUSSIAN SET CODEPAGE TO RUSSIAN SET Date TO GERMAN cLog := ChangeFileExt( Application.ExeName, ".log" ) DELETEFILE(cLog) SET LOGFILE TO &cLog // set filename for debug output to file SET WINDOW MAIN OFF ? REPL("= ",20) + "program Start " + HB_TSTOSTR( hb_DateTime() ) + REPL(" =",20) ? "win_OsIsTSClient()", win_OsIsTSClient() objWMI := WmiService() objWMI:Security_:ImpersonationLevel := 3 objWMI:Security_:AuthenticationLevel := 6 Ocosver:= objWMI:InstancesOf ("Win32_OperatingSystem") for each elem in Ocosver ? elem:name next oTerminal := objWMI:ExecQuery("Select * from Win32_LogonSession Where LogonType=10" ) ? "Number of terminal sessions:",oTerminal:count FOR EACH objItem IN oTerminal ? "objItem:LogonId", objItem:LogonId ? "objItem:StartTime", objItem:StartTime ? objItem:Name // objItem:Name и остальные фишки почему то возвращают NIL next oTerminal := objWMI:ExecQuery("Select * from Win32_LogonSession Where LogonType=10" ) FOR EACH objItem IN oTerminal id := objItem:LogonId userlist := objWMI:ExecQuery("ASSOCIATORS OF {Win32_LogonSession.LogonId="+id+"} WHERE AssocClass=Win32_LoggedOnUser Role=Dependent") ? id For each elem in userlist ? elem:name, elem:Status Next NEXT ? "." ; ? "=== End ===" ShellExecute( 0, "Open", cLog,,, 1 ) RETURN ///////////////////////////////////////////////////////////////////// FUNCTION WMIService( cComp ) Local oWmi ,oLocator hb_default(@cComp,'.') BEGIN SEQUENCE WITH {| oErr | Break( oErr ) } oLocator:= win_oleCreateObject( "wbemScripting.SwbemLocator" ) oWMI := oLocator:ConnectServer(cComp,"ROOT\CIMV2") End SEQUENCE RETURN oWmi
| Взял твой пример и сделал минимум переделок. Что опять недосмотрел ?
|
|
|
|
|
| |
Пост N: 7581
Зарегистрирован: 17.05.05
|
|
Отправлено: 31.01.22 16:07. Заголовок: Andrey пишет: Взял ..
Andrey пишет: цитата: | Взял твой пример и сделал минимум переделок |
| Лучше оставь свой пример который работал и сделай в нём тот же минимум переделок. А если чего и забыл то может L/P указать при подключении к серваку в строке oWMI := oLocator:ConnectServer(cComp,"ROOT\CIMV2")
|
|
|
|
| постоянный участник
|
Пост N: 7213
Зарегистрирован: 12.09.06
|
|
Отправлено: 31.01.22 16:30. Заголовок: Dima пишет: Лучше о..
Dima пишет: цитата: | Лучше оставь свой пример который работал и сделай в нём тот же минимум переделок. |
| Тот тоже не работает....
|
|
|
|
| |
Пост N: 7582
Зарегистрирован: 17.05.05
|
|
Отправлено: 31.01.22 18:39. Заголовок: Может админ увидел т..
Может админ увидел твои движняки и кислород перекрыл в виде отключения WMI сервиса :)
|
|
|
|
| |
Пост N: 7584
Зарегистрирован: 17.05.05
|
|
Отправлено: 31.01.22 20:03. Заголовок: Глянь что возвращает..
Глянь что возвращает oWMI:= oLocator:ConnectServer(cComp,"ROOT\CIMV2") Если это не объект то печалька и видать админчег что то подкрутил......
|
|
|
|
| постоянный участник
|
Пост N: 7215
Зарегистрирован: 12.09.06
|
|
Отправлено: 01.02.22 17:34. Заголовок: Это просто цирк а не..
Это просто цирк а не WMI. Как нет пользователей, то пример работает. Как пользователей больше 2 то пример не работает - возвращает 0 !
|
|
|
|
| |
Пост N: 7602
Зарегистрирован: 17.05.05
|
|
Отправлено: 01.02.22 18:15. Заголовок: Да уж........
Да уж......
|
|
|
Ответов - 37
, стр:
1
2
All
[только новые]
|
|