C# 是否使用.NET检测只读域控制器?

C# 是否使用.NET检测只读域控制器?,c#,active-directory,directoryservices,C#,Active Directory,Directoryservices,我希望能够确定特定域控制器是否为只读。我知道我可以这样做来获得一个可写的DC: using( Domain d = Domain.GetCurrentDomain() ) { DomainController dc = d.FindDomainController( "mysitename", LocatorOptions.WriteableRequired); } 但给定一个DomainController对象,有没有办法确定该DC是否可写 我询问的原因是,我想尝试

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

using( Domain d = Domain.GetCurrentDomain() )
{ 
    DomainController dc = d.FindDomainController(
        "mysitename", LocatorOptions.WriteableRequired);
}
但给定一个DomainController对象,有没有办法确定该DC是否可写


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

这并不优雅,但

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

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

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

这并不优雅,但

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

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

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

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


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

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


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

这不起作用。FindDomainController的第一个参数是要搜索的站点的名称,而不是域控制器主机名。如果您尝试该代码,它将为所有域控制器设置isWritable=false。这不起作用。FindDomainController的第一个参数是要搜索的站点的名称,而不是域控制器主机名。如果您尝试该代码,它将为所有域控制器设置isWritable=false。