zzylscy - 2008-7-5 14:50:00
可以通过调用 FindOne 静态方法之一,获取单个域控制器。这些方法返回表示域控制器的 DomainController 对象。
此方法存在多种版本,用于指定特定站点中的域控制器或指定具有特定用途的域控制器(例如,时间服务器)。不能保证这些方法将返回特定的域控制器。它们将只查找满足指定条件的第一个可用域控制器。
FindOne 静态方法可用于定位特定类型的域控制器,例如时间服务器。
using System.DirectoryServices.ActiveDirectory;
static void FindAnyTimeServer(DirectoryContext context)
{
try
{
DomainController dc = DomainController.FindOne(context, LocatorOptions.TimeServerRequired);
Console.WriteLine("A time server for {0} is {1}.", context.Target, dc.Name);
}
catch (ActiveDirectoryObjectNotFoundException)
{
// No time server found.
Console.WriteLine("No time server was found in {0}.", context.Target);
}
}
可以通过调用 FindAll 静态方法之一,枚举上下文中的所有域控制器。这些方法返回一个 DomainControllerCollection 对象,该对象包含所找到的域控制器。
下面说明如何枚举 DirectoryContext 中的所有域控制器并获取有关每个域控制器的附加信息
using System.DirectoryServices.ActiveDirectory;
static void EnumDomainControllers(DirectoryContext context)
{
Console.WriteLine("Domain Controllers in {0}:", context.Target);
foreach (DomainController dc in DomainController.FindAll(context))
{
Console.WriteLine(dc.Name);
// Roles held by the DC.
Console.WriteLine();
Console.WriteLine("Roles held by {0}:", dc.Name);
foreach (ActiveDirectoryRole role in dc.Roles)
{
Console.WriteLine("\t" + role);
}
// Partitions hosted by the DC.
Console.WriteLine();
Console.WriteLine("Partitions hosted by {0}:", dc.Name);
foreach (string partition in dc.Partitions)
{
Console.WriteLine("\t" + partition);
}
}
}
全局编录服务器
全局编录服务器是一种特殊的域控制器,它包含林中所有对象的副本,但对于每个对象只有一组有限的属性。有关全局编录服务器的详细信息,请参阅 Windows Server 2003 Tech Center 中的 Global Catalog Technical Reference(全局编录技术参考)。
下面的类用于全局编录服务器。
GlobalCatalog
GlobalCatalogCollection
可以通过调用 FindOne 静态方法之一,获取单个全局编录服务器。这些方法返回表示全局编录服务器的 GlobalCatalog。
可以通过调用 FindAll 静态方法之一,枚举上下文中的所有全局编录服务器。这些方法返回一个 GlobalCatalogCollection 对象,该对象包含所找到的域控制器。
下面说明如何枚举 DirectoryContext 中的所有全局编录服务器并获取有关每个全局编录服务器的附加信息
using System.DirectoryServices.ActiveDirectory;
static void EnumGlobalCatalogServers(DirectoryContext context)
{
Console.WriteLine("Global Catalog servers in {0}:", context.Target);
foreach (GlobalCatalog gc in GlobalCatalog.FindAll(context))
{
Console.WriteLine(gc.Name);
// Roles held by the GC.
Console.WriteLine();
Console.WriteLine("Roles held by {0}:", gc.Name);
foreach (ActiveDirectoryRole role in gc.Roles)
{
Console.WriteLine("\t" + role);
}
// Partitions hosted by the GC.
Console.WriteLine();
Console.WriteLine("Partitions hosted by {0}:", gc.Name);
foreach (string partition in gc.Partitions)
{
Console.WriteLine("\t" + partition);
}
}
}