【问题标题】:VB.NET Remove user from active directoryVB.NET 从活动目录中删除用户
【发布时间】:2010-08-06 12:44:39
【问题描述】:

您好,我正在尝试创建一个 VB.NET 应用程序,该应用程序将(希望)减少在我的某些部门帮助台电话上花费的一些时间。我坚持的部分是如何使用 VB.NET 从组中删除用户。以下是我一直在玩的代码:

Public Shared Sub RemoveUserFromGroup(ByVal deUser As String, ByVal GroupName As String)
    Dim entry As DirectoryEntry = ADEntry()
    Dim mySearcher As DirectorySearcher = New DirectorySearcher(entry)

    mySearcher.Filter = "(&(ObjectClass=Group)(CN=" & GroupName & "))"
    mySearcher.PropertiesToLoad.Add("OrganizationalUnit")
    mySearcher.PropertiesToLoad.Add("DistinguishedName")
    mySearcher.PropertiesToLoad.Add("sAMAccountName")

    Dim searchResults As SearchResultCollection = mySearcher.FindAll()
    If searchResults.Count > 0 Then
        Dim group As New DirectoryEntry(searchResults(0).Path)
        Dim members As Object = group.Invoke("Members", Nothing)
        For Each member As Object In CType(members, IEnumerable)
            Dim x As DirectoryEntry = New DirectoryEntry(member)
            MessageBox.Show(x.Properties("sAMAccountName").Value)
            If x.Properties("sAMAccountName").Value = deUser Then
                MessageBox.Show(searchResults.Item(0).Path.ToString)
                MessageBox.Show(x.Properties("sAMAccountName").Value)
                'group.Invoke("Remove", New Object() {x.Properties("OrganizationalUnit").Value})
                group.Properties("member").Remove(x.Properties("OrganizationalUnit").Value)
            End If

        Next
    End If

当我运行程序时,我在 group.properties 行收到一个 COMException is unhandled, unspecified 错误。使用 group.invoke 时,我收到错误 TargetInvocationException 未处理。

我的目标是将用户名 (sAMAccountName) 和组名 (sAMAccountName) 作为字符串传递给将定位用户并将其从组中删除的函数。

我是 VB.NET 的新手,如果有人能提供任何帮助,我将不胜感激。

我正在使用 .NET 2.0 进行编码,因为我不确定它所在的服务器是否会安装 3.5。

【问题讨论】:

  • 向我们提供错误消息和来自 COM 异常的 HResult。 Try : [code] : Catch ex as System.DirectoryServices.DirectoryServicesCOMException : msgbox(ex.Message() & ex.HResult() & ex.ErrorCode()) : End Try
  • 当添加您建议的 Try ... Catch 时,COM 异常仍然发生并且没有出现消息框。我已将 catch 行更改为 Catch ex As System.Exception,这只会显示一个带有文本“未指定错误 -2147467259”的消息框。我会调查这个错误,看看我能找到什么。谢谢,马特

标签: vb.net .net-2.0 active-directory


【解决方案1】:

嗯,错误消息0x80004005 E_FAIL Unspecified failure 不是很有帮助。使用 Active Directory 时,我经常感到沮丧。

换行试试:

group.Properties("member").Remove(x.Properties("OrganizationalUnit").Value)

group.Invoke("Remove", New Object() {x.Path.ToString()})

如果您需要更多参考,请查看 Erika Ehrli 在VB.net Heaven 上的这篇文章。本文介绍了 Active Directory 的各种用例。

希望对你有帮助。

【讨论】:

  • 使用 x.path.tostring() 效果很好。经过许多天和无数的代码变体,最终完成了代码的这个小方面真是太好了。非常感谢您提供帮助,我们将不胜感激。
  • 不客气。我理解 Active Directory 和 COM 的挫败感。
猜你喜欢
  • 1970-01-01
  • 2010-10-28
  • 2015-02-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-10
  • 1970-01-01
  • 2015-03-04
相关资源
最近更新 更多