【问题标题】:How can I remove all users in an Active Directory group?如何删除 Active Directory 组中的所有用户?
【发布时间】:2010-06-08 15:43:38
【问题描述】:

我正在尝试使用以下代码从 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) 的目录。

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

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

【问题讨论】:

  • 你的代码语法没问题。遵循 SLaks 的建议,您应该会达到您想要的结果。

标签: c# .net active-directory


【解决方案1】:

您在删除项目时循环访问它们,导致索引跳过所有其他项目。

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

      或者如果你正在使用

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

      这也可以:

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

      【讨论】:

        【解决方案4】:

        只需使用:

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

        【讨论】:

          【解决方案5】:

          CodeProject 中的这个参考应该会有所帮助:

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

          【讨论】:

            猜你喜欢
            • 2014-03-24
            • 2021-07-15
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多