【问题标题】:Detect read-only domain controller with .NET?使用 .NET 检测只读域控制器?
【发布时间】:2009-06-10 17:34:45
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: c# active-directory directoryservices


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

      如果你有 DomainController 对象,你可以这样做:

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

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

      【讨论】:

      • 那行不通。 FindDomainController 的第一个参数是要搜索的站点的名称,而不是域控制器主机名。如果您尝试该代码,它将为所有域控制器设置 isWritable = false。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-23
      • 1970-01-01
      • 1970-01-01
      • 2011-04-04
      • 2020-08-31
      相关资源
      最近更新 更多