我有一个久经考验的功能,可以确定 AD 用户是否是特定组的成员。多年来一直使用它没有问题。到现在。我正在使用 C# .net 开发一个新应用程序,并创建了一个新的 AD 组来控制访问。我的帐户是相关组的成员,因此应该通过此验证,但它没有。这是代码:
public bool isGroupMember(strUserID)
{
bool b = false;
DirectoryEntry root = new DirectoryEntry("LDAP://DC=domain,DC=com", strADUserID, strADPassword);
DirectorySearcher search = new DirectorySearcher(root);
search.Filter = "samAccountName=" + strUserID;
SearchResult result = search.FindOne();
short groups = result.Properties("memberOf").Count() - 1;
string Group = null;
short i = 0;
while (!(b == true | i == groups)) {
Group = result.Properties("memberOf")(i).ToString;
if (Group == "CN=MyGroup,OU=GroupOU,DC=domain,DC=com") {
b = true;
}
i = i + 1;
}
return b;
}
问题是,虽然我的帐户是 22 个组的成员,但该行
short groups = result.Properties("memberOf").Count() - 1;
只返回 20 个组而不是 22 个,而我之后的组(新)是第 21 组或第 22 组,因此循环在到达组之前已经退出。为什么组枚举不完整?应该是 22 组,为什么要 20 组?