Имя: Пароль:
1C
1С v8
Программно получить список пользователей домена.
0 mzelensky
 
10.07.14
08:24
Доброго всем!

Мне необходимо получить список пользователей сервера (компутера). На ИС нашел замечательную процедурку:

// Функция, позволяющая получить список групп и их пользователей на локальном/удаленном компьютере.
// Параметры:
//    Computer - Имя компьютера.
// Возвращаемое значение:
//    Таблица значений.
//
// Рекомендация:
// Перед применением проверить на компьютерах
// Windows Management Instrumentation (WMI):
// 1. Состояние служб.
// 2. Разрешение в брандмауэре.
//
&НаСервереБезКонтекста
Функция Computer_GroupUsersList(Computer = ".")
    
    Win32_GroupUsersInfo = Новый ТаблицаЗначений;
    Win32_GroupUsersInfo.Колонки.Добавить("Group");
    Win32_GroupUsersInfo.Колонки.Добавить("User");
    
    Попытка
        
        WinMGMT = ПолучитьCOMОбъект("winmgmts:\\" + Computer + "\root\cimv2");
        Win32_GroupUser = WinMGMT.ExecQuery("SELECT * FROM Win32_GroupUser WHERE GroupComponent IS NOT NULL");
        
        Для Каждого GroupUser ИЗ Win32_GroupUser Цикл
            GroupInfo = Win32_GroupUsersInfo.Добавить();
            
            // Группа.
            GroupComponent = GroupUser.GroupComponent;
            ПозицицияИмени = Найти(GroupComponent, "Name=");
            GroupInfo.Group = Сред(GroupComponent, ПозицицияИмени+6);
            GroupInfo.Group = СтрЗаменить(GroupInfo.Group, """", "");
            
            // Пользователь.
            PartComponent = GroupUser.PartComponent;
            ПозицицияИмени = Найти(PartComponent, "Name=");
            GroupInfo.User = Сред(PartComponent, ПозицицияИмени+6);
            GroupInfo.User = СтрЗаменить(GroupInfo.User, """", "");
        КонецЦикла;
        
    Исключение
    КонецПопытки;
    
    Возврат Win32_GroupUsersInfo;
    
КонецФункции

Косяк в том, что она возвращает ТЗ, где содаржится имя группы и имя пользователя, а мне еще нужно так называемое "Полное имя" ну или как я бы это назвал ПРЕДСТАВЛЕНИЕ имени пользователя. Т.е. мне нужно то Имя, которое отображается у пользователя, если нажать кнопку "Пуск".

Например имя пользователя может быть "Zelensky" (имя учетки) а полное имя "Зеленский Максим Александровчи". Вот мне нужно как-то получить это полное имя. Есть у кого идеи?
1 mzelensky
 
10.07.14
09:11
В общем нашел то, что надо. На ИС. Вот процедурка

функция ПолучитьДанныеДоменныхПользователей(ИмяДомена,Реквизиты,Знач Режим = 1) Экспорт
    Реквизиты = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(Реквизиты,",");
    Результат = Новый ТаблицаЗначений;
    Если Реквизиты.Количество() = 0 Тогда
        Возврат Результат;
    КонецЕсли;
    СтрокаРеквизитов = "";
    сч = 0;
    для Каждого ИмяРеквизита из Реквизиты цикл
        сч = сч + 1;
        Результат.Колонки.Добавить(ИмяРеквизита);
        СтрокаРеквизитов = СтрокаРеквизитов + ИмяРеквизита;
        Если сч < Реквизиты.количество() Тогда
            СтрокаРеквизитов = СтрокаРеквизитов + ",";
        КонецЕсли;
    КонецЦикла;
    
    ТекстЗапроса =
    "SELECT
    |" + СтрокаРеквизитов + "
    |FROM
    |    Win32_UserAccount
    |WHERE
    |    Domain = '" + ИмяДомена + "'
    |    AND Disabled = " + ?(Режим = 1,"False","True") + "
    |";
    objWMIService = ПолучитьCOMОбъект("winmgmts:\\.\root\CIMV2");
    colItems = objWMIService.ExecQuery(ТекстЗапроса,,48);
    
    Для Каждого objItem Из colItems Цикл
        НоваяСтрока = Результат.Добавить();
        для Каждого ИмяРеквизита из Реквизиты цикл
            НоваяСтрока[ИмяРеквизита] = objItem[ИмяРеквизита];
        КонецЦикла;
    КонецЦикла;
    Возврат Результат;    
КонецФункции

Пример вызова

ПолучитьДанныеДоменныхПользователей(СокрЛП("ИмяДомена"),"Caption,Name,FullName")
2 mzelensky
 
10.07.14
09:15
Да, миста все больше и больше превращается в место обитания домохозяек, игроманов, политиканов и неудачников, которые спорят о том что лучше "Рено логан или новая Лада Калина", при этом бьют себя пяткой в грудь, что машина дешевле ляма вообще не машина,  но при этом сами ездят на солярисе...

беда-беда... :(
3 ДенисЧ
 
10.07.14
09:16
(2) Ты реально думаешь, что в 8 утра кто-то для тебя будет лазить по гуглю и что-то искать?
Ой бяда...
4 Бешеная Нога
 
10.07.14
09:16
(2) а что ты хотел в 8 утра?
5 Kamas
 
10.07.14
09:17
(1) спасибо сохраню себе в полезные знания
6 Бешеная Нога
 
10.07.14
09:17
и с учетом того что ты сам с помощью поиска нашел ответ - тему вообще можно было не создавать
7 zak555
 
10.07.14
09:17
(3) (4) что делает народ в 8 утра ?
8 ДенисЧ
 
10.07.14
09:19
(7) На работу собирается - моется, бреется, похмеляется
9 mzelensky
 
10.07.14
09:22
(3)(4) Вы по прежнему считаете, что вся Россия находится в одном часовом поясе?
10 mzelensky
 
10.07.14
09:24
(8) Лично я на рабочем месте с 7.40
11 ДенисЧ
 
10.07.14
09:24
(9) Мы по прежнему считаем, что тут, на этом форуме, большинство живёт по московскому времени.
12 zak555
 
10.07.14
09:28
(8) мыться надо перед сном, похмелье лечить
13 Lama12
 
10.07.14
09:29
(0) Эти примеры в книжке по системному программированию в 1С. Книжка писалась еще во времена 7.7.
14 mzelensky
 
10.07.14
09:32
(13) Да, И как бы актуальности они не потеряли. Я уже качаю эту книженцию.
15 Kamas
 
10.07.14
09:33
(12) я и после сна моюсь и зубы чищу;)
16 Kamas
 
10.07.14
09:35
(13) спасибо за наводку почитаем))
17 Kamas
 
10.07.14
09:35
полезная ветка получилась ))