Winnt 그룹의 구성원 목록을 받으십시오
-
05-07-2019 - |
문제
스택 오버플로에는 이와 비슷한 몇 가지 질문이 있지만 그다지 동일하지 않습니다.
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
그것은 그룹을 나타냅니다.