I’m trying to remove all users from an AD group with the following code:
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();
}
}
}
The rootRefreshDir is the directory that contains all the AD groups (childDir).
What I’m finding here is that this code does not behave correctly. It removes users, but it doesn’t do it after the first run. It does “some”. Then I run it again, and again, and again – depending on how many users need to be deleted in a group. I’m not sure why it’s functioning this way.
Can someone help fix this code or provide an alternative method to delete all users in a group?
Your problem is that you’re counting upwards… You first remove an item at index 0. Every remaining item then moves to
index - 1in the list. You then remove at index 1, and every remaining item shuffles except for the one you’ve now left at index 0. Basically: you’re only removing half of the items.Instead of a
forloop, trywhile (groupDE.Properties["member"].Count > 0), and simply remove the item at index0each time.