UserPrincipal.GetGroups выбирает только текущие группы домена - PullRequest
1 голос
/ 16 июня 2011

Я начал с этого кода, чтобы найти все группы, в которые входит пользователь:

Using user As UserPrincipal = UserPrincipal.FindByIdentity(domainContext, name)

Dim groupList As AccountManagement.PrincipalSearchResult(Of Principal) = user.GetGroups
    For Each group As GroupPrincipal In groupList
        myUserGroupList.GroupList.Add(group.Name)
    Next
End Using

Return myUserGroupList

Я обнаружил, что это не возвращает группы из других доменов, поэтому я добавил следующее:

If domain.ToUpper = "Domain1" Then
    Dim myDomainList As DomainConfiguration.DomainCollection = GetDomains()

    For Each DomainItem As DomainConfigElement In myDomainList
        If DomainItem.DomainName.ToUpper <> "Domain1" Then
            Try
                myUserGroupList.GroupList.Add(DomainItem.DomainName.ToUpper)
                Using OtherDomainContext As New PrincipalContext(ContextType.Domain, DomainItem.DomainName, DomainItem.UserName, DomainItem.Password)
                    myUserGroupList.GroupList.Add("Using: " & DomainItem.DomainName.ToString)
                   Try
                      Dim NewGroupList As AccountManagement.PrincipalSearchResult(Of Principal) = user.GetGroups(OtherDomainContext)
                      myUserGroupList.GroupList.Add(NewGroupList.ToString)
                          If NewGroupList IsNot Nothing Then
                              For Each newgroup As UserPrincipal In NewGroupList
                                  myUserGroupList.GroupList.Add(newgroup.Name)
                              Next
                          Else
                              myUserGroupList.GroupList.Add("No Groups for: " & DomainItem.DomainName.ToString)
                          End If
                   Catch ex As Exception
                      myUserGroupList.GroupList.Add("Other Context Ex: " & ex.ToString)
                   End Try

               End Using

           Catch ex As Exception
               myUserGroupList.GroupList.Add("unable to add: " & DomainItem.DomainName.ToString)
           End Try
       End If

    Next                  
End If

Что странного в этом то, что для каждого домена, кроме текущего, я получаю 1 запись для myUserGroupList с текстом «PrincipalSearchResult`1". Я чувствую, что это должно сработать, но я пинаю его уже довольно давно, и Microsoft заявляет, что это поведение By Design . Я постараюсь почти все, но я надеялся избежать advapi32.dll. Спасибо всем, кто ответит.

...