UserPrincipals.GetAuthorizationGroups An error (1301) occurred while enumerating the groups. After upgrading to Server 2012 Domain Controller

后端 未结 10 1284
陌清茗
陌清茗 2020-12-29 21:17

Research:

Similar Issue with workaround, but not actual solution to existing problem

Similar issue pointing to Microsoft End Point update as

10条回答
  •  遥遥无期
    2020-12-29 21:54

    If anyone is interested this is a VB.NET version of the same code. Few things you have to do before this code can work

    1) You have to reference the assembly System.DirectoryServices
    2) Make sure to pass "theusername" variable without the domain, so if your domain is "GIS" and your username is "Hussein" Windows generally authenticate you as GIS\Hussein. So you have to send in just purely the username "Hussein". I worked out the case sensitive stuff.
    3) The method GetGroupsNew takes a username and returns a list of groups
    4) The method isMemberofnew takes a username and a group and verifies that this user is part of that group or not, this is the one I was interested in.

    Private Function getGroupsNew(theusername As String) As List(Of String)
        Dim lstGroups As New List(Of String)
        Try
    
            Dim allDomains = Forest.GetCurrentForest().Domains.Cast(Of Domain)()
    
            Dim allSearcher = allDomains.[Select](Function(domain)
                                                      Dim searcher As New DirectorySearcher(New DirectoryEntry("LDAP://" + domain.Name))
    
                                                      searcher.Filter = [String].Format("(&(&(objectCategory=person)(objectClass=user)(userPrincipalName=*{0}*)))", theusername)
    
                                                      Return searcher
    
                                                  End Function)
    
            Dim directoryEntriesFound = allSearcher.SelectMany(Function(searcher) searcher.FindAll().Cast(Of SearchResult)().[Select](Function(result) result.GetDirectoryEntry()))
    
            Dim memberOf = directoryEntriesFound.[Select](Function(entry)
                                                              Using entry
                                                                  Return New With { _
                                                                   Key .Name = entry.Name, _
                                                                   Key .GroupName = DirectCast(entry.Properties("MemberOf").Value, Object()).[Select](Function(obj) obj.ToString()) _
                                                                  }
                                                              End Using
    
                                                          End Function)
    
    
    
            For Each user As Object In memberOf
                For Each groupName As Object In user.GroupName
                    lstGroups.Add(groupName)
                Next
            Next
    
            Return lstGroups
    
        Catch ex As Exception
            Throw
        End Try
    End Function
    
    Private Function isMemberofGroupNew(theusername As String, thegroupname As String) As Boolean
    
        Try
    
            Dim lstGroups As List(Of String) = getGroupsNew(theusername)
    
            For Each sGroup In lstGroups
                If sGroup.ToLower.Contains(thegroupname.ToLower) Then Return True
            Next
    
            Return False
    
    
        Catch ex As Exception
            Throw
        End Try
    
    End Function
    

提交回复
热议问题