为了账号安全,请及时绑定邮箱和手机立即绑定

如何使用 DirectoryServices AccountManagement 查找用户?

如何使用 DirectoryServices AccountManagement 查找用户?

C#
万千封印 2023-05-14 16:41:19
我使用 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 UsingEnd 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 回答

?
白衣染霜花

TA贡献1796条经验 获得超10个赞

我认为 marc_s 走在正确的轨道上。但是您可以像使用DirectoryEntry. 您可以使用仅包含域名的构造函数,如下所示:

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

这将搜索您的整个域。

也就是说,如果您已经知道如何使用DirectoryEntryand DirectorySearcher,那么最好坚持使用它。无论如何,命名AccountManagement空间只是在后台使用它们。它可以使一些事情变得更容易,但它对你隐藏了很多东西,这会损害性能。直接使用DirectoryEntryandDirectorySearcher几乎总是会执行得更快。


查看完整回答
反对 回复 2023-05-14
  • 1 回答
  • 0 关注
  • 140 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信