我已经查过这篇文章了.但它没有回答我的问题.我想获取特定用户所属的所有活动目录组.
我写了以下代码.但我无法继续进行,因为我不知道如何提供过滤器以及如何访问属性.
class Program
{
static void Main(string[] args)
{
DirectoryEntry de = new DirectoryEntry("LDAP://mydomain.com");
DirectorySearcher searcher = new DirectorySearcher(de);
searcher.Filter = "(&(ObjectClass=group))";
searcher.PropertiesToLoad.Add("distinguishedName");
searcher.PropertiesToLoad.Add("sAMAccountName");
searcher.PropertiesToLoad.Add("name");
searcher.PropertiesToLoad.Add("objectSid");
SearchResultCollection results = searcher.FindAll();
int i = 1;
foreach (SearchResult res in results)
{
Console.WriteLine("Result" + Convert.ToString(i++));
DisplayProperties("distinguishedName", res);
DisplayProperties("sAMAccouontName", res);
DisplayProperties("name", res);
DisplayProperties("objectSid", res);
Console.WriteLine();
}
Console.ReadKey();
}
private static void DisplayProperties(string property, SearchResult res)
{
Console.WriteLine("\t" + property);
ResultPropertyValueCollection col = res.Properties[property];
foreach (object o in col)
{
Console.WriteLine("\t\t" …Run Code Online (Sandbox Code Playgroud) 我看到执行DirectorySearcher FindOne()和我看到的第一个网络数据包之间的初始延迟时间为2-5秒.初始执行后,后续执行立即完成约45秒.在快速执行的这段时间之后,下一次执行将被延迟,并且所有后续执行将立即完成.似乎有某种缓存正在进行,但我无法找到任何确认或描述导致初始延迟的资源.
我们在客户端Windows 2008服务器上注意到了这一点,然后在我们自己的Windows 2008和Windows 7盒子上重现.
这是我简单的.NET 4.0 C#应用程序的样子.延迟发生在"已启动"和"已完成"消息之间.
知道为什么在最初的FindOne()执行时会发生这种延迟吗?任何帮助深表感谢!
using System;
using System.Collections.Generic;
using System.Text;
using System.DirectoryServices;
namespace LdapTest
{
class Program
{
static void Main(string[] args)
{
string[] fetchAttributes;
fetchAttributes = new string[] { "{string[0]}" };
using (DirectoryEntry searchRoot = new DirectoryEntry("LDAP://localserver/ou=lab,dc=ourdomain,dc=com", "cn=binduser,ou=Services,dc=ourdomain,dc=com", "Password", AuthenticationTypes.ReadonlyServer))
{
using (DirectorySearcher searcher = new DirectorySearcher(searchRoot, "(sAMAccountName=UserName)", fetchAttributes, SearchScope.Subtree))
{
Console.WriteLine("Started");
SearchResult result = searcher.FindOne();
Console.WriteLine("Finished");
}
}
}
}
Run Code Online (Sandbox Code Playgroud)