c# - 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) });
}
解决方案
问题是varGroupMemberDns.Count
不会减少,也不应该减少。我相信您可能想要的是在循环之前捕获计数,然后在每次迭代时减少该计数。
var recordCount = varGroupMemberDns.Count;
while (true)
{
recordCount--;
...
if (recordCount < intIncrement)
{
}
...
}
推荐阅读
- java - ArrayList 的 remove() 方法不适用于 int 数组的 ArrayList (ArrayList
) 在 Java 中 - laravel - 在 Laravel 5.8 中禁用按钮
- android - 从另一个类(android)中运行的活动访问函数
- javascript - 拒绝加载图像'https://authorization.example.herokuapp.com/favicon.ico,因为它违反了以下内容安全策略指令
- c++ - 如何计算 BVH 树中的未命中链接?
- dart - Dart 迫使我在子类中实现非抽象方法
- reactjs - 为我的 React 产品组合存储大量高分辨率图像的最佳方式?
- javascript - 尽管来自源的数据已更新 JavaScript php,但 Typeahead 下拉列表是相同的
- azure-container-instances - 使用多个容器更新 Azure 容器实例中的单个容器
- r - 测试 R 中的 shapefile 中是否存在纬度/经度对