У меня есть следующий код ниже.Каждый раз, когда вызывается 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) });
}