为什么属性" primaryGroupID"缺少域控制器

时间:2016-01-21 13:27:29

标签: c#-4.0 active-directory

我正在尝试从域中检索所有DC,并且还想知道它们是可读还是可写。

要知道DC是否可读,我需要读取DC的属性 primaryGroupID 值。在下面的代码中尝试相同。

代码段 -

 var currDomain = Domain.GetCurrentDomain();

 foreach (DomainController dc in currDomain.DomainControllers)
        {
            var dcName = dc.Name;
            var de = dc.GetDirectoryEntry(); // DirectoryEntry represent DC

            // Loads the values of the specified properties into the property cache.
            de.RefreshCache(new[] {"primaryGroupID"});

           if (de.Properties.Contains("primaryGroupID"))
            {
                int primaryGroupID;
                var strPrimaryGroupID = Convert.ToString(de.Properties["primaryGroupID"][0]);

                if (int.TryParse(strPrimaryGroupID, out primaryGroupID))
                {
                    // RID for the "Read-only Domain Controllers" built-in group in Active Directory
                    // Writable Domain Controllers have primaryGroupID set to 516 (the "Domain Controllers" group).
                    dcName = string.Format(primaryGroupID == 521 ? "{0} (Read only)" : "{0} (Writable)", dc.Name);
                }
            }
        }

然而,财产仍然没有出现。我已经从AD确认DC存在相应的属性。

显示的默认属性显示在下面的屏幕截图中 -

List of default properties

您是否知道为何缺少 primaryGroupID 属性?

1 个答案:

答案 0 :(得分:0)

dc.GetDirectoryEntry()返回服务器对象,而不是DC的计算机对象。并且primaryGroupID不存在于服务器对象上。但它确实包含对计算机对象的引用。试试这个:

var dcDe = dc.GetDirectoryEntry(); // DirectoryEntry represent DC
var de = new DirectoryEntry("LDAP://" + dcDe.Properties["serverReference"].Value);

if (de.Properties.Contains("primaryGroupID"))
...