如何删除Active Directory组中的所有用户?

时间:2010-06-08 15:43:39

标签: c# .net active-directory

我正在尝试使用以下代码从AD组中删除所有用户:

private void RemoveStudents() {
        foreach (DirectoryEntry childDir in rootRefreshDir.Children) {
            DirectoryEntry groupDE = new DirectoryEntry(childDir.Path);

            for (int counter = 0; counter < groupDE.Properties["member"].Count; counter++) {
                groupDE.Properties["member"].Remove(groupDE.Properties["member"][counter]);
                groupDE.CommitChanges();
                groupDE.Close(); 
            }             
        }      
    }    

rootRefreshDir是包含所有AD组(childDir)的目录。

我在这里发现的是这段代码行为不正确。它会删除用户,但在第一次运行后却不会执行此操作。它确实“有些”。然后我再次运行它,并再次运行 - 取决于组中需要删除多少用户。我不确定它为什么会这样运作。

有人可以帮助修复此代码或提供删除组中所有用户的替代方法吗?

5 个答案:

答案 0 :(得分:5)

您在删除项目时循环浏览项目,导致索引跳过其他所有项目。

您需要将内部for循环更改为向后循环,如下所示:

PropertyValueCollection members = groupDE.Properties["member"];
for (int counter = members.Count - 1; counter >= 0; counter--) {
    members.RemoveAt(counter);
    groupDE.CommitChanges();
    groupDE.Close(); 
}  

答案 1 :(得分:4)

你的问题是你向上计数......你首先删除索引0处的项目。然后每个剩余的项目移动到列表中的index - 1。然后,您在索引1处删除,并且每个剩余项目将之外的其他项目改为您现在在索引0处留下的项目。基本上:您只删除了一半的项目。

而不是for循环,请尝试while (groupDE.Properties["member"].Count > 0),并且每次只删除索引0处的项目。

答案 2 :(得分:4)

或者如果您正在使用

DirectoryServices.AccountManagement.GroupPrincipal(.NET 3.5 +):

这也可行:

groupPrincipal.Members.Clear();
groupPrincipal.Save();

答案 3 :(得分:2)

只需使用:

group.Properties["member"].Clear();
group.CommitChanges();

答案 4 :(得分:0)

CodeProject中的这个引用应该有所帮助:

“如何做(几乎)AD中的所有事情: http://www.codeproject.com/KB/system/everythingInAD.aspx