我有一组Active Directory用户DirectoryEntries,我需要获取与每个目录相关联的街道地址。我正在使用以下内容:
bool TryGetPropertyValue(DirectoryEntry de, string propertyName, out string propertyValue)
{
if (de.Properties.Contains(propertyName) && de.Properties[propertyName].Count > 0)
{
propertyValue = de.Properties[propertyName][0].ToString();
return true;
}
propertyValue = string.Empty;
return false;
}
但我找不到可以获取用户地址的propertyName
值。是否存在,或者是否有其他方式来获取此信息?
答案 0 :(得分:3)
小心DirectoryEntry de
的方式。在纯LDAP的观点上,最好在目录搜索期间指定您真正想要检索的属性。我知道大多数开发人员都认为所有属性都应该是retreive,但从LDAP的角度来看,它并不那么明显:
/* Connection to Active Directory
*/
string sFromWhere = "LDAP://WM2008R2ENT:389/dc=dom,dc=fr";
DirectoryEntry deBase = new DirectoryEntry(sFromWhere, "dom\\jpb", "root.123");
DirectorySearcher dsLookFor = new DirectorySearcher(deBase);
dsLookFor.Filter = "(CN=user1 Users)";
dsLookFor.SearchScope = SearchScope.Subtree;
dsLookFor.PropertiesToLoad.Add("cn");
// Add one line for each property you need.
dsLookFor.PropertiesToLoad.Add("...");
SearchResultCollection srcUsers = dsLookFor.FindAll();
在属性名称的观点上,您最好参考Active Directory Schema和specialy All atributes。
为了将属性与用户和计算机Active-Directory MMC中的输入字段链接,您可以使用LDP.EXE(在W2K8中是本机的,来自W2K3中的资源工具包)。另一个有趣的工具是Apache Directory Studio。它适用于所有平台(Linux(MAC),Microsoft),并允许您浏览目录和架构。