快速的方法来获取用户信息的Active Directory [英] Quick way to retrieve user information Active Directory
问题描述
如何查询从的Active Directory 用户信息?我有code这样的作品,但它真的很慢。我使用C#。 这是code我目前使用的:
How to query user information from Active Directory? I have code that works, but it's really slow. I'm using C#. This is the code I currently use:
static void Main(string[] args)
{
SearchResultCollection sResults = null;
try
{
//modify this line to include your domain name
string path = "LDAP://EXTECH";
//init a directory entry
DirectoryEntry dEntry = new DirectoryEntry(path);
//init a directory searcher
DirectorySearcher dSearcher = new DirectorySearcher(dEntry);
//This line applies a filter to the search specifying a username to search for
//modify this line to specify a user name. if you want to search for all
//users who start with k - set SearchString to "k"
dSearcher.Filter = "(&(objectClass=user))";
//perform search on active directory
sResults = dSearcher.FindAll();
//loop through results of search
foreach (SearchResult searchResult in sResults)
{
if (searchResult.Properties["CN"][0].ToString() == "Adit")
{
////loop through the ad properties
//foreach (string propertyKey in
//searchResult.Properties["st"])
//{
//pull the collection of objects with this key name
ResultPropertyValueCollection valueCollection =
searchResult.Properties["manager"];
foreach (Object propertyValue in valueCollection)
{
//loop through the values that have a specific name
//an example of a property that would have multiple
//collections for the same name would be memberof
//Console.WriteLine("Property Name: " + valueCollection..ToString());
Console.WriteLine("Property Value: " + (string)propertyValue.ToString());
//["sAMAccountName"][0].ToString();
}
//}
Console.WriteLine(" ");
}
}
}
catch (InvalidOperationException iOe)
{
//
}
catch (NotSupportedException nSe)
{
//
}
finally
{
// dispose of objects used
if (sResults != null)
sResults.Dispose();
}
Console.ReadLine();
}
你会更快code模样,从AD获取用户信息?
What would faster code look like to get user information from AD?
推荐答案
之所以你的code是缓慢的是,你的 LDAP 查询检索每一个用户对象在您的域名,即使你只用平洞的一个共同的名字感兴趣的一个用户:
The reason why your code is slow is that your LDAP query retrieves every single user object in your domain even though you're only interested in one user with a common name of "Adit":
dSearcher.Filter = "(&(objectClass=user))";
因此,要优化,你需要缩小LDAP查询只是你感兴趣的用户尝试是这样的:
So to optimize, you need to narrow your LDAP query to just the user you are interested in. Try something like:
dSearcher.Filter = "(&(objectClass=user)(cn=Adit))";
另外,不要忘了处理这些对象完成时:
In addition, don't forget to dispose these objects when done:
- 的DirectoryEntry目录项
- DirectorySearcher从dSearcher
这篇关于快速的方法来获取用户信息的Active Directory的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!