2010-06-08 58 views
3

我试图从AD组用下面的代码删除所有用户:如何删除Active Directory组中的所有用户?

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是包含所有广告组(childDir)的目录。

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

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

+1

你的代码语法没问题。按照SLaks的建议,你应该达到你想要的结果。 – mcass20 2010-06-08 15:55:06

回答

4

您的问题是你向上计数......你先在索引为0的每个剩余项目中删除项目然后移至列表中的index - 1。然后你在索引1删除,剩下的每个项目都洗牌,除了为你现在在索引0处留下的那个。基本上:你只能删除一半的项目。

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

5

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

您需要更改内部for循环依次向后,就像这样:

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

只需使用:

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

或者,如果你正在使用

(.NET 3.5+):

这也可以工作:

groupPrincipal.Members.Clear(); 
groupPrincipal.Save(); 
相关问题