2016-01-21 85 views
0

我想從域中檢索所有DC,並且還想知道它們是否可讀或可寫。爲什麼屬性「primaryGroupID」缺少域控制器

要知道,如果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缺少任何線索?

+0

@HansPassant你可以請你分享一下如何爲代碼片段中的** de **對象分享我的共享嗎? –

+0

從dc.GetDirectoryEntry()獲取的DirectoryEntry的objectClass是什麼? primaryGroupID屬性可能對該類型的對象無效。 –

+0

我只是自己試了一下。它返回一個「服務器」對象。 primaryGroupID屬性對服務器對象無效。 –

回答

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")) 
...