限制LDAP查询中返回的属性

如何通过System.DirectoryServices限制LDAP查询中返回的属性?

我一直在使用DirectorySearcher并将我想要的属性添加到DirectorySearcher.PropertiesToLoad。 问题是,这只是确保添加的属性包含在DirectoryEntry.Properties以及一些默认列表中。 有没有办法指定您想要返回的唯一属性?

DirectoryEntry base = new DiectoryEntry(rootPath, null, null, AuthenticationTypes.FastBind); DirectorySearcher groupSearcher = new DirectorySearcher(base); groupSearcher.Filter = "(objectClass=group)"; groupSearcher.PropertiesToLoad.Add("distinguishedName"); groupSearcher.PropertiesToLoad.Add("description"); foreach (SearchResult groupSr in groupDs.FindAll()) ... 

在foreach循环中,当我获得组DirectoryEntry时,我可以访问大约16种不同的属性,而不仅仅是我指定的两个属性(distinguishedName,description)

您正在限制的东西是您的SearchResult对象中可用/填充的属性 – 您可以直接在foreach循环中访问这些属性:

 DirectoryEntry baseEntry = new DirectoryEntry(rootPath, null, null, AuthenticationTypes.FastBind); DirectorySearcher groupSearcher = new DirectorySearcher(baseEntry); groupSearcher.Filter = "(objectClass=group)"; groupSearcher.PropertiesToLoad.Add("distinguishedName"); groupSearcher.PropertiesToLoad.Add("description"); foreach (SearchResult groupSr in groupSearcher.FindAll()) { if(groupSr.Properties["description"] != null && groupSr.Properties["description"].Count > 0) { string description = groupSr.Properties["description"][0].ToString(); } ..... } 

您无法限制实际DirectoryEntry上的属性 – 因此,如果您获取每个SearchResult的目录条目 – 您可以完全访问所有内容。 但重点是您可以定义所需的属性,并直接SearchResult上访问这些属性, 无需返回到底层的DirectoryEntry