Ldap查询,以查找安全组中的所有计算机

本文关键字:计算机 安全 查询 查找 Ldap | 更新日期: 2023-09-27 18:13:27

我是这么做的:

public List<string> GetUsersInGroup(string domain, string group)
{
   List<string> groupMemebers = new List<string>();    
   DirectoryEntry entry = new DirectoryEntry("LDAP://" + domain);                
   DirectorySearcher groupSearch = new DirectorySearcher(entry);
   groupSearch.Filter = "(&(objectclass=group)(samaccountname=" + group +"))";
   groupSearch.PropertiesToLoad.Add("DistinguishedName");
   SearchResult srG = groupSearch.FindOne();    
   String DN = srG.Properties["DistinguishedName"][0].ToString();    
   entry.RefreshCache(new string[] { "memberOf" });    
   DirectorySearcher mySearcher = new DirectorySearcher(entry);
   mySearcher.Filter = "(|(&(objectClass=computer)(memberOf=" + DN + "))(&(objectClass=User)(memberOf=" + DN + ")))";
   SearchResultCollection srcg = mySearcher.FindAll();
   foreach (SearchResult resEnt in srcg)
   {
       groupMemebers.Add(resEnt.GetDirectoryEntry().Name.ToString());
   }
   return groupMemebers;
}
编辑:

这是很好的发现用户属于组,但我可以得到计算机(成员)组如果组是"域计算机"或"域控制器"(主组!)。

有人能帮我吗?

Ldap查询,以查找安全组中的所有计算机

AD中对象(用户或计算机)的主组存储在一个名为"primaryGroupID"的属性中。例如,对于用户,这通常是513,这意味着主组是"Domain users"。

内置组(域用户,域计算机等)有许多成员,通过"member"属性以通常的方式存储成员会导致性能问题。这就是为什么在memberof属性中看不到"Domain Computers"的原因。

基本上,如果你想查找属于"域计算机"的计算机,你必须运行查询

(&(objectClass=computer)(primaryGroupID=515))

检查如何使用PrimaryGroupID属性来查找用户的主组-这也适用于计算机。

同时检查Windows操作系统中的知名安全标识符