Имя: Пароль:
1C
1С v8
Получить список сеансов, убить выбранный
0 dark_avenger
 
29.09.12
10:01
Здравствуйте,
Второй день шуршу по интернету, но никак не могу найти точку входа в терминальные сессии. Мне необходимо в 1С 8.2 УФ увидеть активные пользовательские сессии терминала и выборочную убить.
Что нашел:
query user/session - варварский вариант, выгружать весь список в файл и парсить, потом с помощью logoff убивать.
WMI - знаю что можно, но не нашел информации как подключится и получить список активных пользователей
ActiveXRDP, не стал глубоко изучать, т.к. мое приложение на УФ
Может кто заморачивался подобным, или знает о решении данной задачи другими способами?
1 sttt
 
29.09.12
10:45
On Error Resume Next
Dim strComputer
Dim objWMIService
Dim propValue
Dim objItem
Dim SWBemlocator
Dim UserName
Dim Password
Dim colItems
Dim strUserName
Dim strUserDomain

strComputer = "."
UserName = ""
Password = ""

Set SWBemlocator = CreateObject("WbemScripting.SWbemLocator")
Set objWMIService = SWBemlocator.ConnectServer(strComputer,"root\CIMV2",UserName,Password)
Set colItems = objWMIService.ExecQuery("Select * from Win32_Process",,48)

For Each objItem In colItems
   objItem.GetOwner strUserName, strUserDomain
   Wscript.Echo "Process " & objItem.Name & " is owned by " _
     & strUserDomain & "\" & strUserName & "."
Next
2 sttt
 
29.09.12
10:45
3 dark_avenger
 
29.09.12
10:53
(1) во, это уже интересно, спасибо, сейчас перепешу в 1С затестю
4 dark_avenger
 
29.09.12
14:57
Попутно встал еще один вопрос, вот так взлетает(но пришлось запустить под админом):

Перем strComputer,objWMIService,propValue,objItem,SWBemlocator,
   UserName,Password,colItems,strUserName,strUserDomain;
   
   strComputer = ".";
   UserName = "";//"SuperAdmin";
   Password = "";//"SuperPass";
   
   SWBemlocator = Новый COMОбъект("WbemScripting.SWbemLocator");
   objWMIService = SWBemlocator.ConnectServer(strComputer,"root\CIMV2",UserName,Password);
   colItems = objWMIService.ExecQuery("Select * from Win32_Process WHERE Name = 'rdpclip.exe'",,48);
   
   
   ТЗ = Новый ТаблицаЗначений;
   ТЗ.Колонки.Добавить("Пар1");
   ТЗ.Колонки.Добавить("Пар2");
   Для каждого objItem из colItems Цикл
       objItem.GetOwner(strUserName, strUserDomain);
       нов = ТЗ.Добавить();
       нов.Пар1 = strUserName;
       нов.Пар2 = objItem.SessionID;
   КонецЦикла;
   
   возврат 1;

а вот если логин и пароль указать (пробовал запустить от юзера) то пишет:
(SWbemLocator): User credentials cannot be used for local connections

Не в курсе что оно хочет?
5 dark_avenger
 
29.09.12
15:07
Попробовал так:
SWBemlocator.Security_.ImpersonationLevel = 3;    SWBemlocator.Security_.AuthenticationLevel = 6;

Ту же ошибку дает
Есть два вида языков, одни постоянно ругают, а вторыми никто не пользуется.