Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

список групп домена, в которых состоит пользователь

46K
11 ноября 2010 года
dts
14 / / 08.10.2009
Добрый день!
Я получаю программно список всех пользователей домена и их SID-ы. Теперь хотелось бы рассортировать этих пользователей по группам в которых они состоят. Узнал, что раньше это можно было сделать с помощью механизма "отражения" internal-метода GetRoles() класса WindowsIdentity. У меня MS VS.NET 2010 и по-ходу этого метода там уже нет. Делал так:

Код:
public static string[] GetRoles(System.Security.Principal.WindowsPrincipal principal)
        {
            string[] roles = (string[])CallPrivateMethod(principal.Identity, "GetRoles");
            return roles;
        }

private static object CallPrivateMethod(object o, string methodName)
        {
            Type t = o.GetType();
            MethodInfo mi = t.GetMethod(methodName, BindingFlags.NonPublic | BindingFlags.Instance);
            if (mi == null)
            {
                throw new ReflectionTypeLoadException(null,null,String.Format("{0}.{1} метод не найден. Реализация среды была изменена",t.FullName,methodName));
            }
            return mi.Invoke(o, null);
        }

Не работает, генерит исключение. Может у кого-то есть идеи как по другому это сделать.
297
11 ноября 2010 года
koodeer
1.2K / / 02.05.2009
Дык есть же свойство WindowsIdentity.Groups. Или я неправильно понял, что вам нужно?
46K
11 ноября 2010 года
dts
14 / / 08.10.2009
Это свойство, как я понимаю, возвращает список групп пользователя от имени которого запущен процесс (текущего), для другого пользователя необходим его логин и пароль (пароля нет).
У меня есть имена и сиды всех пользователей домена и названия групп и их сиды. И вот не могу понять как их сопоставить (какой пользователь в какой группе состоит)
8.2K
11 ноября 2010 года
bagie2
299 / / 26.10.2008
http://sources.codenet.ru/download/3793/UserGroups.html
это может помочь. только немного придется покопаться со скриптами на VBS и затем уже его портировать на дотнет как в примере

еще можно пойти наоборот для группы вывести список пользователей. расскажу как это сделать другим способом, может он понравится.
работаем через OLEDB
 
Код:
using (var connection = new OleDbConnection("Provider=ADsDSOObject"))
{
   connection.Open();
   using (var command = new OleDbCommand("SELECT sAMAccountName FROM 'LDAP://OU=Users,OU=Units,DC=msk,DC=corp,DC=ru' WHERE memberOf='CN=My User Group,OU=Groups,OU=Units,DC=msk,DC=corp,DC=ru'", connection))
   using (var reader = command.ExecuteReader())
   {
         while (reader.Read())
            Console.WriteLine(reader["sAMAccountName"]);    
   }
}


вот некоторые поля для запросов: userAccountControl, objectSid, createTimestamp, CN, sAMAccountName
46K
11 ноября 2010 года
dts
14 / / 08.10.2009
Спасибо bagie2!
Вот идея про "наоборот" как раз то что нужно. Мне же без разницы сопоставлять пользователей группам или наоборот
5
12 ноября 2010 года
hardcase
4.5K / / 09.08.2005
Цитата: bagie2

работаем через OLEDB


В принципе можно и напрямую LDAP законнектить.

8.2K
12 ноября 2010 года
bagie2
299 / / 26.10.2008
Цитата: hardcase
В принципе можно и напрямую LDAP законнектить.


Да, я не знал, спасибо.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог