首页 > 解决方案 > Active Directory 检索组中的组成员似乎陷入无限循环

问题描述

我在下面有以下代码。每次directoryEntryGroupMembers.Properties["member"];调用时,它都会返回相同的列表。结果,while循环陷入了无限循环。我怀疑组在 AD 本身而不是代码中的设置方式存在问题。有谁知道如何解决这个问题?

注意:我知道我们的 AD 中有循环嵌套组,但这直到现在还没有引起问题。所以,我不知道循环组嵌套是否是问题所在。

string strDirectoryEntryPath = null;
const int intIncrement = 1500; // https://msdn.microsoft.com/en-us/library/windows/desktop/ms676302(v=vs.85).aspx
string strDsFilter = null;
string[] strDsProperties = null;
List<Guid> lstGroupMemberGuid = null;
DataTypeConverter objConverter = null;
DirectoryEntry directoryEntryGroupMembers = null;
SearchResultCollection searchResultCollection = null;
DirectorySearcher directorySearcher = null; 

objConverter = new DataTypeConverter();

lstGroupMemberGuid = new List<Guid>();

strDirectoryEntryPath = strActiveDirectoryHost + "/<GUID=" + strPropertyValue + ">";

directoryEntryGroupMembers = new DirectoryEntry(strDirectoryEntryPath, null, null, AuthenticationTypes.Secure);

while (true)
{
    intCountIteration = intCountIteration + 1;

    var varGroupMemberDns = directoryEntryGroupMembers.Properties["member"];

    foreach(string strMemberDn in varGroupMemberDns)
    {
        if (dctObjectGuidDn.TryGetValue(strMemberDn, out Guid gidMemberGuid))
        {
            lstGroupMemberGuid.Add(gidMemberGuid);
        }
    }

    if (varGroupMemberDns.Count < intIncrement)
    {
        break;
    }

    directoryEntryGroupMembers.RefreshCache(new[] { string.Format("member;range={0}-*", lstGroupMemberGuid.Count) });
}

标签: c#while-loopactive-directoryinfinite-loop

解决方案


问题是varGroupMemberDns.Count不会减少,也不应该减少。我相信您可能想要的是在循环之前捕获计数,然后在每次迭代时减少该计数。

var recordCount = varGroupMemberDns.Count;
while (true)
{
recordCount--;
...
  if (recordCount < intIncrement)
  {

  }
  ...
}

推荐阅读