문제

스택 오버플로에는 이와 비슷한 몇 가지 질문이 있지만 그다지 동일하지 않습니다.

Win XP 컴퓨터에서 로컬 그룹을 열거 나 창조하고, 도메인, 로컬 및 잘 알려진 계정에 멤버를 추가하고 싶습니다. 또한 동일한 계정을 두 번 추가하지 않도록 사용자가 이미 회원인지 확인하고 싶습니다.

지금까지 나는 DirectoryEntry 객체를 WinNT:// 공급자. 이것은 괜찮아 지지만 그룹 구성원 목록을 얻는 방법에 갇혀 있습니까?

누구 든지이 작업을 수행하는 방법을 알고 있습니까? 아니면 DirectoryEntry를 사용하는 것보다 더 나은 솔루션을 제공합니까?

도움이 되었습니까?

해결책

좋아, 다른 솔루션으로 엉망이되지만 내 원래 질문에 가장 잘 맞는 것은 다음과 같습니다. '표준'메소드를 사용하여 지역 그룹의 구성원에게 액세스 할 수있는 DirectoryEntry 객체를 얻을 수 없습니다. 멤버를 열거 할 수있는 유일한 방법은 호출 방법을 사용하여 기본 객체 멤버 메소드를 호출하는 것입니다.

using(DirectoryEntry groupEntry = new DirectoryEntry("WinNT://./Administrators,group"))
{
    foreach(object member in (IEnumerable) groupEntry.Invoke("Members"))
    {
        using(DirectoryEntry memberEntry = new DirectoryEntry(member))
        {
            Console.WriteLine(memberEntry.Path);
        }
    }
}

또한 비슷한 기술을 사용하여 지역 그룹에서 멤버를 추가하고 제거했습니다.

바라건대 이것은 다른 사람도 도움이됩니다. 키이스.

편집하다 Tim : VB.NET 버전이 추가되었습니다

Public Function MembersOfGroup(ByVal GroupName As String) As List(Of DirectoryEntry)
    Dim members As New List(Of DirectoryEntry)
    Try
        Using search As New DirectoryEntry("WinNT://./" & GroupName & ",group")
            For Each member As Object In DirectCast(search.Invoke("Members"), IEnumerable)
                Dim memberEntry As New DirectoryEntry(member)
                members.Add(memberEntry)
            Next
        End Using
    Catch ex As Exception
        MessageBox.Show(ex.ToString)
    End Try
    Return members
End Function

다른 팁

Microsoft .NET Framework는 Active Directory로 작업하기위한 표준 라이브러리를 제공합니다. System.DirectoryServices 네임 스페이스 System.DirectoryServices.dll에서.

Microsoft는 System.DirectoryServices 네임 스페이스에서 두 가지 주요 클래스를 사용하는 것이 좋습니다. DirectoryEntry 그리고 DirectorySearcher. 대부분의 경우 DirectorySearcher 클래스 만 사용하는 것으로 충분합니다.

업데이트 : 컴퓨터에서 테스트했습니다. 작동합니다. 그러나 아마도 나는 당신의 질문을 오해했을 것입니다.

다음은 우수한 예입니다 Codeproject 기사:

특정 광고 그룹에 속하는 사용자 목록 얻기

using System.DirectoryServices;

ArrayList GetADGroupUsers(string groupName)
{    
   SearchResult result;
   DirectorySearcher search = new DirectorySearcher();
   search.Filter = String.Format("(cn={0})", groupName);
   search.PropertiesToLoad.Add("member");
   result = search.FindOne();

   ArrayList userNames = new ArrayList();
   if (result != null)
   {
       for (int counter = 0; counter < 
          result.Properties["member"].Count; counter++)
       {
           string user = (string)result.Properties["member"][counter];
               userNames.Add(user);
       }
   }
   return userNames;
}

이 정보를 찾을 수 있어야합니다. "member" 기인하다DirectoryEntry 그것은 그룹을 나타냅니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top