Как получить детали Active Directory текущего пользователя в C#

Это не позволяет вам передать string, как вы просили в своем вопросе, но он все равно может работать для вас.

Метод OrderByDescending принимает Func<TSource, TKey>, поэтому вы можете переписать свою функцию следующим образом:

List<Student> QueryStudents<TKey>(Func<Student, TKey> orderBy)
{
    return existingStudents.OrderByDescending(orderBy).ToList();
}

Существуют и другие перегрузки для OrderByDescending, которые берут Expression<Func<TSource, TKey>> и / или IComparer<TKey>. Вы также можете посмотреть на них и посмотреть, предоставляют ли они вам что-нибудь полезное.

36
задан Sophia 20 May 2009 в 05:40
поделиться

3 ответа

"Пред Windows 2000" имя т.е. DOMAIN\SomeBody, Somebody часть известна как sAMAccountName.

Так попытка:

using(DirectoryEntry de = new DirectoryEntry("LDAP://MyDomainController"))
{
   using(DirectorySearcher adSearch = new DirectorySearcher(de))
   {
     adSearch.Filter = "(sAMAccountName=someuser)";
     SearchResult adSearchResult = adSearch.FindOne();
   }
}

someuser@somedomain.com.au является UserPrincipalName, но это не обязательное поле.

52
ответ дан Alan 10 October 2019 в 09:51
поделиться

Alan уже дал Вам, правильный ответ - использует sAMAccountName для фильтрации пользователя.

я добавил бы рекомендацию на Вашем использовании DirectorySearcher - если Вы только хотите одно или два сведения, добавьте их в "PropertiesToLoad" набор DirectorySearcher.

Вместо того, чтобы получить целый большой пользовательский объект и затем выбрать один или два объекта, это просто возвратит точно те биты, в которых Вы нуждаетесь.

Образец:

adSearch.PropertiesToLoad.Add("sn");  // surname = last name
adSearch.PropertiesToLoad.Add("givenName");  // given (or first) name
adSearch.PropertiesToLoad.Add("mail");  // e-mail addresse
adSearch.PropertiesToLoad.Add("telephoneNumber");  // phone number

Это - просто обычное свойство AD/LDAP, называет Вас, должен определить.

44
ответ дан Malachi 10 October 2019 в 09:51
поделиться

Добавьте ссылку на COM «Библиотека активных типов DS»


            Int32 nameTypeNT4               = (int) ActiveDs.ADS_NAME_TYPE_ENUM.ADS_NAME_TYPE_NT4;
            Int32 nameTypeDN                = (int) ActiveDs.ADS_NAME_TYPE_ENUM.ADS_NAME_TYPE_1779;
            Int32 nameTypeUserPrincipalName = (int) ActiveDs.ADS_NAME_TYPE_ENUM.ADS_NAME_TYPE_USER_PRINCIPAL_NAME;

            ActiveDs.NameTranslate nameTranslate = new ActiveDs.NameTranslate();

            // Convert NT name DOMAIN\User into AD distinguished name 
            // "CN= User\\, Name,OU=IT,OU=All Users,DC=Company,DC=com"
            nameTranslate.Set(nameTypeNT4, ntUser);

            String distinguishedName = nameTranslate.Get(nameTypeDN);

            Console.WriteLine(distinguishedName);

            // Convert AD distinguished name "CN= User\\, Name,OU=IT,OU=All Users,DC=Company,DC=com" 
            // into NT name DOMAIN\User
            ntUser = String.Empty;
            nameTranslate.Set(nameTypeDN, distinguishedName);
            ntUser = nameTranslate.Get(nameTypeNT4);
            Console.WriteLine(ntUser);

            // Convert NT name DOMAIN\User into AD UserPrincipalName Name.User@Company.com
            nameTranslate.Set(nameTypeNT4, ntUser);
            String userPrincipalName = nameTranslate.Get(nameTypeUserPrincipalName);

            Console.WriteLine(userPrincipalName);
11
ответ дан 27 November 2019 в 05:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: