使用.NET检测只读域控制器?

时间:2009-06-10 17:34:46

标签: c# active-directory directoryservices

我希望能够确定特定域控制器是否为只读。我知道我可以做这样的事情来获得一个可写的DC:

using( Domain d = Domain.GetCurrentDomain() )
{ 
    DomainController dc = d.FindDomainController(
        "mysitename", LocatorOptions.WriteableRequired);
}

但是给定一个DomainController对象是否有办法确定该DC是否可写?

我问的原因是我想尝试选择一个首选的域控制器1.可写2.在我的站点和3.全局目录。似乎找不到具有所有这些属性的服务器的好方法。

2 个答案:

答案 0 :(得分:5)

只读和可写域控制器之间的一个区别是,所有只读域控制器都将属性primaryGroupID设置为521(这是“只读域控制器”内置组的RID在Active Directory中)。可写域控制器将primaryGroupID设置为516(“域控制器”组)。

无法轻松更改只读域控制器的主要组(Active Directory不允许更改),因此您可以安全地假设所有RODC:s都将该属性设置为521。

答案 1 :(得分:0)

它不优雅,但是......

如果您有DomainController对象,则可以执行以下操作:

bool isWritable = true;
try
{
    using (Domain d = Domain.GetCurrentDomain())
        var dc = d.FindDomainController(theDomainController.Name, LocatorOptions.WriteableRequired);
}
catch(ActiveDirectoryObjectNotFoundException)
{
    isWritable = false;
}

这应该确定特定的域控制器是否可写。