C# 返回有关找到的用户Active Directory的信息
我正在制作一个活动的直接管理工具,但我在使某些东西正常工作方面遇到了困难。 我创建了一个类,希望在其中查找特定用户并返回其信息(名称、全名、CN等)。我可以找到所有这些信息,但当我不知道从我的类返回所有值的最佳方法时 以下是我目前使用的代码:C# 返回有关找到的用户Active Directory的信息,c#,active-directory,directoryservices,C#,Active Directory,Directoryservices,我正在制作一个活动的直接管理工具,但我在使某些东西正常工作方面遇到了困难。 我创建了一个类,希望在其中查找特定用户并返回其信息(名称、全名、CN等)。我可以找到所有这些信息,但当我不知道从我的类返回所有值的最佳方法时 以下是我目前使用的代码: DirectorySearcher search = new DirectorySearcher(ldapConnectie); search.Filter = "(cn=" + username + ")"; SearchResult result =
DirectorySearcher search = new DirectorySearcher(ldapConnectie);
search.Filter = "(cn=" + username + ")";
SearchResult result = search.FindOne();
if (result != null)
{
List<string> listLdapFields = new List<string>();
List<Object> listLdapValues = new List<Object>();
ResultPropertyCollection fields = result.Properties;
foreach (String ldapField in fields.PropertyNames)
{
listLdapFields.Add(ldapField);
foreach (Object myCollection in fields[ldapField])
{
listLdapValues.Add(myCollection);
}
}
}
DirectorySearcher search=新的DirectorySearcher(ldapConnectie);
search.Filter=“(cn=“+username+””);
SearchResult=search.FindOne();
如果(结果!=null)
{
List listLdapFields=新列表();
List listLdapValues=新列表();
ResultPropertyCollection字段=result.Properties;
foreach(fields.PropertyNames中的字符串ldapField)
{
listLdapFields.Add(ldapField);
foreach(字段[ldapField]中的对象myCollection)
{
listLdapValues.Add(myCollection);
}
}
}
程序将所有内容都很好地添加到列表中。但是如果我返回这个,我就无法在“CN”或“Name”上搜索列表。我只能找到索引号上的信息
希望你能帮助我 如果您使用的是.NET 3.5及更高版本,则应检查
System.DirectoryServices.AccountManagement
(S.DS.AM)命名空间。请在此处阅读所有相关内容:
// set up domain context
using (PrincipalContext ctx = new PrincipalContext(ContextType.Domain))
{
// find a user
UserPrincipal user = UserPrincipal.FindByIdentity(ctx, username);
if(user != null)
{
// do something here....
// the most often used attributes are available as nice, strongly-typed properties
string value = user.GivenName;
value = user.Surname;
value = user.EmailAddress;
value = user.VoiceTelephoneNumber;
}
}
新的S.DS.AM使得在广告中与用户和群组进行互动变得非常容易 这里有一种方法,您可以按名称调用属性。它还使用发出请求的经过身份验证的帐户
string domainPath = String.Format("LDAP://{0},DC=site,DC=com", domain);
using (DirectoryEntry searchRoot = new DirectoryEntry(domainPath))
{
using (DirectorySearcher search =
filterSearch(new DirectorySearcher(searchRoot), username))
{
SearchResult result = null;
try
{
result = search.FindOne();
}
catch (DirectoryServicesCOMException e)
{
//handle the error
}
if (result != null)
{
string givenname = result.Properties["givenname"].Count > 0 ?
(string)result.Properties["givenname"][0] : "";
string sn = result.Properties["sn"].Count > 0 ?
(string)result.Properties["sn"][0] : "";
var samaccount= result.Properties["samaccountname"].Count > 0 ?
(string)result.Properties["samaccountname"][0] : "";
var name = String.Format("{0}, {1}", sn, givenname);
var email = result.Properties["mail"].Count > 0 ?
(string)result.Properties["mail"][0] : "";
}
}
}
//Apply a filter to search only specific classes and categories.
//Add the specific properties to be retrieved
private DirectorySearcher filterSearch(DirectorySearcher search, string username)
{
DirectorySearcher filteredSearch = search;
filteredSearch.Filter = "(&(objectClass=user)(objectCategory=person)(samaccountname=" + username + "))";
filteredSearch.PropertiesToLoad.Add("givenname");
filteredSearch.PropertiesToLoad.Add("sn");
filteredSearch.PropertiesToLoad.Add("samaccountname");
filteredSearch.PropertiesToLoad.Add("department");
filteredSearch.PropertiesToLoad.Add("physicalDeliveryOfficeName");
filteredSearch.PropertiesToLoad.Add("mail");
return filteredSearch;
}
如果要查找特定属性,这可能会有所帮助,但如果要检索所有属性/值的列表,请查看另一个
有一个可以使用的常用筛选器列表。查看它们并适当修改filterSearch方法