Как мне найти пользователя с помощью DirectoryServices AccountManagement? - PullRequest
1 голос
/ 29 июня 2019

Я уже давно использую DirectoryEntry & DirectorySearcher, и он всегда работает. Недавно я узнал об AccountManagement и решил попробовать его в новом проекте. Но я не могу найти его, чтобы найти меня.

Этот старый код отлично работает:

Using oDirectoryEntry As DirectoryEntry = New DirectoryEntry("LDAP://us.psy.com", "xxx2yyy", "MyStrongPwd")
    Using oDirectorySearcher As DirectorySearcher = New DirectorySearcher(oDirectoryEntry)
        oDirectorySearcher.Filter = "(&(sAMAccountType=805306368)(sAMAccountName=xxx2yyy))"
        Try
            Return oDirectorySearcher.FindOne IsNot Nothing
        Catch
            Return False
        End Try
    End Using
End Using

Но я не могу заставить эту работу:

using (PrincipalContext context = new PrincipalContext(ContextType.Domain, "US", "DC=psy,DC=com"))
{
    MessageBox.Show(context.ConnectedServer); // This shows me the server name
    using (UserPrincipal user = UserPrincipal.FindByIdentity(context, IdentityType.SamAccountName, "xxx2yyy"))
    {
        MessageBox.Show(user.SamAccountName); // results in Object reference not set to an instance of an object
        user.ChangePassword("OldPwd", "NewPwd");
        user.Save();
    }
}

Надеясь, что кто-то увидит, что я делаю неправильно.

1 Ответ

1 голос
/ 03 июля 2019

Я думаю, что marc_s находится на правильном пути. Но вы можете просто указать домен так же, как вы используете DirectoryEntry. Вы можете использовать конструктор с только доменным именем , например:

using (PrincipalContext context = new PrincipalContext(ContextType.Domain, "us.psy.com"))

Это будет искать весь ваш домен.

Тем не менее, если вы уже знаете, как использовать DirectoryEntry и DirectorySearcher, вам лучше придерживаться этого. Пространство имен AccountManagement все равно использует их в фоновом режиме. может упростить некоторые вещи, но многое от вас скрывает, что снижает производительность. Использование DirectoryEntry и DirectorySearcher напрямую почти всегда будет работать быстрее.

Я немного говорил об этом в статье, которую я написал (но также и о том, как добиться большей производительности от DirectoryEntry и DirectorySearcher): Active Directory: лучшая производительность

...