System.DirectoryServices.AccountManagement.Principal.Delete()抛出不明确的异常

时间:2018-01-23 14:21:44

标签: c# exception

我正在为我工​​作的公司创建一个ActiveDirectory管理工具包。

在编写函数以使用System.DirectoryServices.AccountManagement读取和处理组成员资格及其附加的嵌套组时,我会抛出一个奇怪的异常。

这是代码:

var nestedgroups = user.GetAuthorizationGroups();
var groups = user.GetGroups();       

try
{
    foreach(Principal p in groups)
    {
        foreach(Principal np in nestedgroups)
            {
                if (p.Equals(np))
                {
                    np.Delete();
                }
            }
        }
    }
}
catch (Exception ex)
{
    Console.WriteLine(ex.ToString());
}

nestedgroups表示UserPrincipal.GetAuthorizationGroups();

的结果

groups表示UserPrincipal.GetGroups();

的结果

功能的目的是从nestedgroups中删除groups中已存在的所有主体。这样做是为了提高进一步处理和输出分配给相关用户的组的性能。

if-block的条件为真,因此针对当前由foreach循环处理的Principal的Principal.Delete();应该执行得非常好。 这就是问题的起点。一旦Delete() - 函数运行,它就会抛出以下异常:

Exception thrown: 'System.DirectoryServices.AccountManagement.PrincipalOperationException' in System.DirectoryServices.AccountManagement.dll
System.DirectoryServices.AccountManagement.PrincipalOperationException: A device attached to the system is not functioning.

当代码继续运行时,Principal不会从集合中删除(纠正我,如果这是不正确的措辞)。

我已将此异常提供给谷歌,但没有任何成功。

如果您能为我提供有关如何处理/避免此错误的个人经验的更多资源或提示,我将非常高兴。

1 个答案:

答案 0 :(得分:0)

创建新列表并在返回之前将有效条目添加到该列表中。原始列表不必变异