Обнаружить контроллер домена только для чтения с .NET? - PullRequest
1 голос
/ 10 июня 2009

Я хочу иметь возможность определить, доступен ли конкретный контроллер домена только для чтения. Я знаю, что могу делать такие вещи, чтобы получить доступный для записи DC:

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

Но, учитывая объект DomainController, есть ли способ определить, доступен ли для записи этот DC?

Причина, по которой я спрашиваю, состоит в том, что я хочу попробовать выбрать предпочтительный контроллер домена, доступный для записи 1. На моем сайте и 3. в глобальном каталоге. Кажется, не существует хорошего способа найти сервер со всеми этими атрибутами.

Ответы [ 2 ]

5 голосов
/ 15 июля 2009

Одно из различий между контроллерами домена только для чтения и записи состоит в том, что все контроллеры домена только для чтения имеют атрибут primaryGroupID, установленный на 521 (который является RID для встроенной группы «Контроллеры домена только для чтения» в Active Directory). Для контроллеров домена с возможностью записи primaryGroupID установлено значение 516 (группа «Контроллеры домена»).

Первичная группа для контроллера домена только для чтения не может быть легко изменена (Active Directory не разрешит это), поэтому можно с уверенностью предположить, что все RODC: s имеют этот атрибут равным 521.

0 голосов
/ 10 июня 2009

Это не элегантно, но ...

Если у вас есть объект DomainController, вы можете сделать:

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

Это должно определить, доступен ли для записи конкретный контроллер домена.

...