Получение пользовательских свойств Active Directory пользователей - PullRequest
1 голос
/ 19 января 2012

Я пытался получить два пользовательских свойства, которые установлены для наших пользователей Active Directory, но похоже, что я продолжаю получать постоянный список свойств (проверено на 2 разных серверах AD)

Предполагая, чтоя пытаюсь выбрать свойства prop1 и prop2, что я делаю неправильно в следующем коде:

        List<String> nProps = new List<string>();

        DirectoryEntry directoryEntry = new DirectoryEntry("WinNT://DOM");
        foreach (DirectoryEntry child in directoryEntry.Children)
        {
            // No filtering; ignore schemes that are not User schemes
            if (child.SchemaClassName == "User")
            {
                foreach (var sVar in child.Properties.PropertyNames)
                    nProps.Add(sVar.ToString());

                break;
            }
        }

nProps не содержит ЛЮБЫХ моих пользовательских свойств (не prop1 nor prop2)

(он содержит другие свойства, такие как BadPasswordAttempts, Имя пользователя и т. д.)

Есть идеи?

Ответы [ 2 ]

3 голосов
/ 19 января 2012

Вы уверены, что ваши свойства установлены?если они не установлены, они не будут перечислены как свойства.Если вы ищете конкретные свойства, я бы порекомендовал вам использовать DirectorySearcher В следующем примере показано получение свойства компании данного пользователя.Обратите внимание, что вы проверяете, существует ли свойство первым, а затем извлекаете его.

DirectoryEntry directoryEntry = new DirectoryEntry("WinNT://DOM");

//Create a searcher on your DirectoryEntry
DirectorySearcher adSearch= new DirectorySearcher(directoryEntry);
adSearch.SearchScope = SearchScope.Subtree;    //Look into all subtree during the search
adSearch.Filter = "(&(ObjectClass=user)(sAMAccountName="+ username +"))";    //Filter information, here i'm looking at a user with given username
SearchResult sResul = adSearch.FindOne();       //username is unique, so I want to find only one

if (sResult.Properties.Contains("company"))     //Let's say I want the company name (any property here)
{
    string companyName = sResult.Properties["company"][0].ToString();    //Get the property info
}
0 голосов
/ 14 января 2014

Хотя это не прямой ответ на ваш вопрос, мы используем следующее:

        public static string GetProperty(string adUserId, string domain, string lDAPLoginId, string lDAPPassword, string propertyName)
        {
            PrincipalContext ctx = new PrincipalContext(ContextType.Domain, domain, lDAPLoginId, lDAPPassword);
            UserPrincipal up = UserPrincipal.FindByIdentity(ctx, IdentityType.SamAccountName, adUserId);

            string result = "";

            if (up != null)
            {
                result = PrincipalGetProperty(up, propertyName);
            }

            return result;
        }
...