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;
}
编辑:这是很好的发现用户属于组,但我可以得到计算机(成员)组如果组是"域计算机"或"域控制器"(主组!)。
有人能帮我吗?
AD中对象(用户或计算机)的主组存储在一个名为"primaryGroupID"的属性中。例如,对于用户,这通常是513,这意味着主组是"Domain users"。
内置组(域用户,域计算机等)有许多成员,通过"member"属性以通常的方式存储成员会导致性能问题。这就是为什么在memberof属性中看不到"Domain Computers"的原因。
基本上,如果你想查找属于"域计算机"的计算机,你必须运行查询
(&(objectClass=computer)(primaryGroupID=515))
检查如何使用PrimaryGroupID属性来查找用户的主组-这也适用于计算机。
同时检查Windows操作系统中的知名安全标识符