Как получить подробную информацию об адресе в Active Directory, используя UserPrincipal в C # - PullRequest
0 голосов
/ 15 октября 2019

Я занят созданием функции поиска в моем приложении с графическим интерфейсом, которое работает на моем Windows Server для добавления, удаления, обновления и поиска пользователей. Я почти закончил сборку приложения, но не могу решить проблему получения подробностей из другого свойства, которое не указано в UserPrincipal, например, свойство 'Address'. Как я могу получить это свойство?

Я пробовал много стилей кодирования, чтобы попасть в данное свойство 'Адрес', но оно все равно не работает.

Вот код:

private void ListOfUsers(String ou)
{
    List<string> users = new List<string>();

    PrincipalContext ctx = new PrincipalContext(ContextType.Domain, "EMRE", "OU=" + ou + ",dc=emre,dc=han");
    UserPrincipal qbeUser = new UserPrincipal(ctx);
    PrincipalSearcher search = new PrincipalSearcher(qbeUser);


    foreach (UserPrincipal user in search.FindAll())
    {
        users.Add(user.UserPrincipalName);
        users.Add("********");
        users.Add(user.GivenName);
        users.Add(user.Surname);

        if (user.GetUnderlyingObjectType() == typeof(DirectoryEntry))
        {
            using (var entry = (DirectoryEntry)user.GetUnderlyingObject())
            {
                if (entry.Properties["Address"] != null)
                    users.Add(entry.Properties["Street"].Value.ToString());
            }
        }
        users.Add(user.VoiceTelephoneNumber);
        users.Add(user.EmailAddress);
        users.Add(ou);

    }

    string[] row = users.ToArray();
    var listViewItem = new ListViewItem(row);
    lstStudents.Items.Add(listViewItem);

}

Я всегда получаю нулевое значение, даже если свойство не равно нулю

1 Ответ

0 голосов
/ 15 октября 2019

Атрибут, который вы хотите, на самом деле называется streetAddress. Вы также можете использовать Properties.Contains, чтобы проверить, существует ли значение (хотя эффект на самом деле такой же, как проверка для null, его проще читать).

if (entry.Properties.Contains("streetAddress"))
    users.Add(entry.Properties["streetAddress"].Value.ToString());

ЛичноМне нравится использовать DirectoryEntry / DirectorySearcher напрямую, а не UserPrincipal / PrincipalSearcher, потому что это дает мне больше контроля над тем, что он делает, что может повысить производительность. Я написал немного об этом здесь: Active Directory: лучшая производительность

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...