通过 C# 删除 Active Directory 中的用户

Posted

技术标签:

【中文标题】通过 C# 删除 Active Directory 中的用户【英文标题】:Delete an user in Active Directory via C# 【发布时间】:2011-09-26 22:34:08 【问题描述】:

我正在尝试。当我尝试运行以下代码时,出现错误。

错误信息:

A local error has occurred

代码:

DirectoryEntry ent = new DirectoryEntry("LDAP://192.168.1.99/OU=FIRMA");
    ent.Username = "idm\administrator";
    ent.Password = "123123QQ";
    DirectorySearcher dsrc = new DirectorySearcher(ent);
    dsrc.Filter = string.Format("(&(objectCategory=user)(SAMAccountName=adKullaniciadi))");
    DirectoryEntry silsunuya = ent.Children.Find("CN=adKullaniciadi","objectClass=person");
    ent.Children.Remove(silsunuya);
    ent.Close();
    silsunuya.Close();
    dsrc.Dispose();

【问题讨论】:

【参考方案1】:

我有一个本地运行的 ASP.Net 网站,我们的 IT 团队使用它来删除 AD 帐户,它似乎工作正常。我记得当我开发这个应用程序时,我必须处理很多细微差别,这让我很难弄清楚 AD 发生了什么。这是我正在使用的代码(在 VB.Net 中):

Public Shared Function GetUser(ByVal username As String) As DirectoryEntry
    If String.IsNullOrEmpty(username) Then Return Nothing

    Dim path As String = ConfigurationManager.ConnectionStrings("ADConnectionString").ConnectionString
    Dim ds As New DirectorySearcher(path)

    ds.Filter = "(&(objectClass=user)(sAMAccountName=" + username + "))"
    ds.PropertiesToLoad.Add("sAMAccountName")         ' username
    ds.PropertiesToLoad.Add("mail")         ' e-mail address
    ds.PropertiesToLoad.Add("description")  ' Bureau ID
    ds.PropertiesToLoad.Add("company")      ' company name
    ds.PropertiesToLoad.Add("givenname")    ' first name
    ds.PropertiesToLoad.Add("sn")           ' last name
    ds.PropertiesToLoad.Add("name")         ' client name
    ds.PropertiesToLoad.Add("cn")           ' common name
    ds.PropertiesToLoad.Add("dn")           ' display name
    ds.PropertiesToLoad.Add("pwdLastSet")
    ds.SearchScope = SearchScope.Subtree
    Dim results As SearchResult = ds.FindOne

    If results IsNot Nothing Then
        Return New DirectoryEntry(results.Path)
    Else
        Return Nothing
    End If
End Function

Public Shared Sub DeleteUser(ByVal username As String, Optional ByVal useImpersonation As Boolean = False)
    Dim user As DirectoryEntry = GetUser(username)
    Dim ou As DirectoryEntry = user.Parent
    ou.Children.Remove(user)
    ou.CommitChanges()
End Sub

查看您的代码,我想到了以下一些想法:

    尝试使用 dsrc.PropertiesToLoad.Add("sAMAccountName") 尝试添加对 ent.CommitChanges() 的调用 您能否使用命令行 AD 查询工具验证路径和凭据是否正确? 能否具体确定错误发生在哪一行?

【讨论】:

我同意第 2 点。我认为这就是问题所在。见msdn.microsoft.com/en-us/library/…

以上是关于通过 C# 删除 Active Directory 中的用户的主要内容,如果未能解决你的问题,请参考以下文章

C#:如何在启用 SSL 的情况下连接到 Active Directory?

通过 LDAP 连接到 Active Directory

C# 中的 LDAP 和 Active Directory 身份验证

在 C# 中验证远程 Active Directory 的用户

如何在 C# 中获取当前用户的 Active Directory 详细信息

C# - 使用 LDAP 检索 Active Directory 的组成员