【问题标题】:Adding User to AD Group in VB.Net (2008)在 VB.Net (2008) 中将用户添加到 AD 组
【发布时间】:2016-03-15 20:57:19
【问题描述】:

我需要使用 VB 将用户添加到 Active Directory。除了将用户分配到组之外,我发现代码(大部分)都有效。我相当确定代码可以工作,只是不知道要传递给它的组的格式。

给定代码(下)和我的 AD 结构的图像(下),传递给例程以将用户添加到组“Level1/All Users/Level 2/A-K”的 GroupName 的结构是什么“?

TIA

Public Shared Sub AddUserToGroup(ByVal de As DirectoryEntry, ByVal deUser As DirectoryEntry, ByVal GroupName As String)
Dim deSearch As DirectorySearcher = New DirectorySearcher()
deSearch.SearchRoot = de
deSearch.Filter = "(&(objectClass=group) (cn=" & GroupName & "))"
Dim results As SearchResultCollection = deSearch.FindAll()
Dim isGroupMember As Boolean = False
If results.Count > 0 Then
    Dim group As New DirectoryEntry(results(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)
        Dim name As String = x.Name
        If name <> deUser.Name Then
            isGroupMember = False
        Else
            isGroupMember = True
            Exit For
        End If
    Next member
    If (Not isGroupMember) Then
        group.Invoke("Add", New Object() {deUser.Path.ToString()})
    End If
    group.Close()
End If
Return

End Sub

【问题讨论】:

  • 我以某种方式认出了这个 Sub grin。好的..所以这个函数是为了将用户添加到组中而构建的。您的“A-K”是一个组织单位 (OU)。请说明您是想在此 OU 中创建用户,还是确实想将用户添加到现有组。
  • 创建用户时,我会打开 AD 仪表板。根据用户的姓氏,我导航到图像中的 A-K 或 L-Z。在那里,我右键单击并选择“新建>用户”。此时会弹出添加用户对话框,我可以添加用户。现在我承认我不太了解 AD 的内部运作,特别是 OU 和 Group 之间的区别。我想要做的是自动化我一直在手动做的事情。我的代码在创建用户的同时也能发挥作用。问题是,无论我作为“GroupName”传递什么,它都将它放在“root”(Level1)中。
  • 好吧,我现在明白你想要什么了。给我一点时间,我会给你代码和解释

标签: vb.net active-directory ldap


【解决方案1】:

根据您在评论中的输入,我为您设置了这个Sub

你还没有弄清楚Level2 下面的级别,所以我就叫它Level3

这个功能已经启用用户为禁用用户无用...

参考资料:

Imports System.DirectoryServices

如何使用:

CreateUser("Doe", "John")

方法:

Public Sub CreateUser(ByVal givenname As String, ByVal surname As String)

    Dim dom As New DirectoryEntry()
    Dim ou As DirectoryEntry = dom.Children.Find("OU=All Users")
    Dim ou2 As DirectoryEntry = ou.Children.Find("OU=Level2")
    Dim ou3 As DirectoryEntry = ou2.Children.Find("OU=Level3")

    Dim firstLetter As String = givenname.Substring(0, 1)
    Dim ou4 As DirectoryEntry

    If firstLetter Like "*[A-K]*" Then
        ou4 = ou3.Children.Find("OU=A-K")
    Else
        ou4 = ou3.Children.Find("OU=L-Z")
    End If

    Dim ADuser As DirectoryEntry = ou4.Children.Add("CN=" & givenname & "\, " & surname, "user")

    ADuser.CommitChanges()

    'The User is now created. Most people forget to enable their users so I'll put it in here too 

    'UF_DONT_EXPIRE_PASSWD 0x10000
    Dim exp As Integer = CInt(ADuser.Properties("userAccountControl").Value)
    ADuser.Properties("userAccountControl").Value = exp Or &H1
    ADuser.CommitChanges()
    'UF_ACCOUNTDISABLE 0x0002
    Dim val As Integer = CInt(ADuser.Properties("userAccountControl").Value)
    ADuser.Properties("userAccountControl").Value = val And Not &H2
    ADuser.CommitChanges()


End Sub

有关与 AD 和 LDAP 交互的基本知识,请参阅我在 this 帖子中的回答。

【讨论】:

  • 太完美了!谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多