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对象并使用相应的属性(例如displayNamesngivenNameinitials

例:

 ... 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); } }