在 VB.Net 中将用户添加到 AD 组 (2008)

Adding User to AD Group in VB.Net (2008)

我需要使用 VB 将用户添加到 Active Directory。我找到了(大部分)有效的代码,除了将用户分配给一个组。我相当确定代码有效,只是不知道要传递给它的组的格式。

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

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

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 post 中的回答。