我使用 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"))
这将搜索您的整个域。
也就是说,如果您已经知道如何使用DirectoryEntry
and DirectorySearcher
,那么最好坚持使用它。无论如何,命名AccountManagement
空间只是在后台使用它们。它可以使一些事情变得更容易,但它对你隐藏了很多东西,这会损害性能。直接使用DirectoryEntry
andDirectorySearcher
几乎总是会执行得更快。
- 1 回答
- 0 关注
- 140 浏览
添加回答
举报
0/150
提交
取消