我正在使用System.DirectoryServices.AccountManagement命名空间类来管理多个组的成员资格。这些团体控制着我们印刷会计系统的人口,其中一些非常庞大。我在从这些大型组之一中删除任何用户时遇到了问题。我有一个说明问题的测试程序。请注意,我正在测试的组不是嵌套的,但 user.IsMemberOf() 似乎也有同样的问题,而 GetAuthorizationGroups() 正确显示了用户所属的组。有问题的组有大约 81K 成员,这比它应该拥有的多,因为 Remove() 不起作用,通常约为 65K 左右。
我很想听听其他遇到此问题并已解决的人的意见。我有一个微软的未结案子,但由于呼叫中心大约有 17 小时的时差,所以他们在我通常离开家前大约一个小时才到公司上班。
using (var context = new PrincipalContext( ContextType.Domain ))
{
using (var group = GroupPrincipal.FindByIdentity( context, groupName ))
{
using (var user = UserPrincipal.FindByIdentity( context, userName ))
{
if (user != null)
{
var isMember = user.GetAuthorizationGroups()
.Any( g => g.DistinguishedName == group.DistinguishedName );
Console.WriteLine( "1: check for membership returns: {0}", isMember );
if (group.Members.Remove( user ))
{
Console.WriteLine( "user removed successfully" );
group.Save();
}
else
{
// do save in case Remove() is lying to me
group.Save();
Console.WriteLine( "user remove failed" );
var isStillMember = user.GetAuthorizationGroups()
.Any( g => g.DistinguishedName == group.DistinguishedName );
Console.WriteLine( "2: check for membership returns: {0}", isStillMember );
}
}
}
}
}