我有一个尝试过的真实函数,用于确定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组,所以循环在它到达组之前已经退出。为什么群组枚举不完整?为什么20组应该是22?