Ldap查询特定于组的所有成员
我希望获得属于特定组’groupName’的用户列表传递给私有方法。
DirectoryEntry de = new DirectoryEntry("LDAP://DC=xxxx,DC=net"); // Root Directory // var ds = new DirectorySearcher(de); ds.PropertiesToLoad.Add("SAMAccountName"); ds.PropertiesToLoad.Add("member"); ds.Filter = "(&(objectClass=group)(SAMAccountName=" + groupName + "))"; SearchResultCollection AllGroupUsers; AllGroupUsers = ds.FindAll();
该查询返回3个属性: – adspath,accountName和member。 成员是我真正追求的。我访问成员属性及其值,如下面的代码所示: –
if (AllGroupUsers.Count > 0) { ResultPropertyValueCollection values = AllGroupUsers[0].Properties["member"];
但这里发生了一些奇怪的事 在等号的RHS上,AllGroupUsers具有特定成员的值“CN = Mike Schoomaker R,……..”
在等号的LHS上,值为“CN = Mike Schoomaker(OR),…..”
我不太确定这是怎么可能的…… AllGroupUsers下的每一个值都不会发生…只有我知道的事情才会发生在活动目录上的外部用户…有谁能告诉我我是怎么做的可以修复此问题并获取实际的firstName,LastName和MiddleInitial?
using (PrincipalContext ctx = new PrincipalContext(ContextType.Domain)) { // find a user using (var group = GroupPrincipal.FindByIdentity(ctx, "groupName")) { if (group == null) { MessageBox.Show("Group does not exist"); } else { var users = group.GetMembers(true); foreach (UserPrincipal user in users) { //user variable has the details about the user } } } }
要获取用户而不是组,您应该设置DirectoryEntry对象并使用相应的属性(例如displayName
, sn
, givenName
, initials
)
例:
... AllGroupUsers = ds.FindAll(); if (AllGroupUsers.Count > 0) { ResultPropertyValueCollection values = AllGroupUsers[0].Properties["member"]; foreach (string s in values) { DirectoryEntry u = new DirectoryEntry("LDAP://" + s); Console.WriteLine(u.Properties["displayName"].Value); } }
- 在ASP.NET webapp中,FindByIdentity因PricipalOperationException而失败
- 将地址信息添加到活动目录用户
- 如何在Active Directory中更改用户的登录名
- C#ADAL AcquireTokenAsync()没有弹出框
- 如何使用objectGUID获取DirectoryEntry?
- 获取AD OU列表
- 使用DirectoryServices.AccountManagement从OU获取组
- 使用PrincipalContext.ValidateCredentials对本地计算机进行身份validation时出错?
- 以递归方式获取Active Directory组的成员,即包括子组