获取“成员”组的用户查询以获取组成员资格,然后查询以获取有关每个用户的信息。这是我的代码:DirectoryEntryroot=newDirectoryEntry("LDAP://server:port");DirectorySearcher搜索器=newDirectorySearcher(root);searcher.Filter="(&(ObjectClass=Group)(CN=foo-group))";varmembers=(IEnumerable)searcher.FindOne().GetDirectoryEntry().Invoke("members");词典结果=新词典();foreach(成员中的对象成员){DirectoryEntryde=newDirectoryEntry(成员);results.Add(de.Properties["SAMAccountname"][0].ToString(),de.Properties["cn"][0].ToString());理想情况下,我希望能够执行单个查询来获取属于该组成员的每个用户,过滤要加载的属性,然后显示它们。所以像这样的DirectoryEntryroot=newDirectoryEntry("LDAP://server:port");DirectorySearcher搜索器=newDirectorySearcher(root);searcher.PropertiesToLoad.Add("cn");searcher.PropertiesToLoad.Add("SAMAccountname");searcher.Filter="(&(ObjectClass=user)(memberof=foo-group))";foreach(varuserinsearcher.FindAll()){//dowhatever...}不幸的是,由于某些原因,这不起作用。感谢您的帮助,如果可以使用System.DirectoryServices.AccountManagement:varcontext=newPrincipalContext(ContextType.Domain,"YOUR_DOMAIN_NAME");使用(varsearcher=newPrincipalSearcher()){vargroupName="YourGroup";varsp=newGroupPrincipal(context,groupName);searcher.QueryFilter=sp;vargroup=searcher.FindOne()asGroupPrincipal;if(group==null)Console.WriteLine("无效组名:{0}",groupName);foreach(varfingroup.GetMembers()){varprincipal=fasUserPrincipal;如果(principal==null||string.IsNullOrEmpty(principal.Name))继续;Console.WriteLine("{0}",principal.Name);我有一些VB代码也可以用旧方法完成,但这对于AccountManagement来说肯定更简单。这是我所指的VB代码(再次它不漂亮,但它的功能):PublicFunctionGetUsersByGroup(deAsDirectoryEntry,groupNameAsString)AsIEnumerable(OfDirectoryEntry)DimuserListAsNewList(OfDirectoryEntry)DimgroupAsDirectoryEntry=GetGroup(de,groupName)IfgroupIsNothingThenReturnNothingForEachuserInGetUsers(de)IfIsUserInGroup(user,group)ThenuserList.Add(user)EndIfNext返回userListEndFunctionPublicFunctionGetGroup(deAsDirectoryEntry,groupNameAsString)AsDirectoryEntryDimdeSearchAsNewDirectorySearcher(de)deSearch.Filter="(&(objectClass=group)(SAMAccountName="&groupName&"))"昏暗的结果AsSearchResult=deSearch.FindOne()IfresultIsNothingThenReturnNothingEndIfReturnresult.GetDirectoryEntry()EndFunctionPublicFunctionGetUsers(deAsDirectoryEntry)AsIEnumerable(OfDirectoryEntry)DimdeSearchAsNewDirectorySearcher(de)DimuserList作为新列表(OfDirectoryEntry)deSearch.Filter="(&(objectClass=person))"ForEachuserIndeSearch.FindAll()userList.Add(user.GetDirectoryEntry())NextReturnuserListEndFunctionPublicFunctionIsUserInGroup(userAsDirectoryEntry,groupAsDirectoryEntry)AsBooleanDim成员值=user.Properties("memberOf")IfmemberValuesIsNothingOrElsememberValues.Count=0ThenReturnFalseForeachgInmemberValues.ValueIfg=group.Properties("distinguishedName").Value.ToString()ThenReturnTrue结束如果NextReturnFalseEndFunction用法:Dimentries=NewDirectoryEntry("LDAP://...")DimuserListAsIEnumerable(OfDirectoryEntry)=GetUsersByGroup(entries,"GroupName")usingSystem.DirectoryServices;DirectoryEntryobjEntry=DirectoryEntry(Ldapserver,userid,password);DirectorySearcherpersonSearcher=newDirectorySearcher(objEntry);personSearcher.Filter=string.Format("(SAMAccountName={0}",username);SearchResultresult=personSearcher.FindOne();if(result!=null){目录条目personEntry=result.GetDirectoryEntry();PropertyValueCollectiongroups=personEntry.Properties["memberOf"];foreach(组中的字符串g){Console.WriteLine(g);//会写groupname}}我原来用的类似用你贴的方法,大概12分钟就完成了整个公司的广告,得到结果,换成这种方法后,大概2分钟。你将需要使用我写的ldapserver的ldapserver地址和用户名和密码,用户名是你要找的人的SAMAccountName。如果勾选这里,可以进行如下操作:以上是C#学习教程:获取“members”组用户分享的所有内容。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注—DirectoryEntrygroup=newDirectoryEntry("LDAP://CN=foo-group,DC=Cmp,DC=COM");foreach(objectdningroup.Properties["member"])//随心所欲本文来自网络合集,不代表立场,如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
