我正在尝试从域中检索所有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存在相应的属性。
显示的默认属性显示在下面的屏幕截图中 -
您是否知道为何缺少 primaryGroupID 属性?
答案 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"))
...