다음을 통해 공유


연습: 로컬 디렉터리 개체 보기

이 항목의 절차에서는 DirectoryEntry를 사용하여 로컬 컴퓨터의 사용자, 그룹 및 서비스를 나열하는 방법에 대해 설명합니다. DirectoryEntry는 Active Directory 도메인 서비스 기술을 사용하여 이 정보에 액세스합니다. 구성 요소에서 만들어진 각 항목에는 해당 구성 요소의 속성 목록이 들어 있습니다.

사용자 인터페이스를 만들려면

  1. 파일 메뉴에서 새로 만들기를 선택한 다음 프로젝트를 클릭합니다.

  2. 새 프로젝트 대화 상자의 왼쪽 창에서 Visual Basic .NET, Visual C# 또는 Visual J#을 선택한 다음 Windows 응용 프로그램 템플릿을 선택합니다. 프로젝트 이름을 "ActiveDirectory"로 지정합니다.

  3. 도구 상자의 Windows Forms 탭에서 TreeView 컨트롤을 Form1로 끌어 놓습니다.

  4. TreeView 컨트롤의 Name 속성을 "viewPC"로 설정합니다. 이 연습에서는 사용자, 그룹 및 서비스 각각에 해당하는 최상위 수준 노드 세 개를 포함하도록 TreeView 컨트롤을 나중에 수정합니다. 두 번째 수준 노드는 컴퓨터에 등록된 단일 사용자, 그룹 및 서비스를 나타냅니다. 각 사용자, 그룹 및 서비스에는 두 개의 자식 노드 즉, Active Directory 도메인 서비스 경로를 위한 노드와 속성을 위한 노드가 있습니다.

DirectoryEntry 구성 요소를 구성하려면

  1. 솔루션 탐색기에서 프로젝트를 마우스 오른쪽 단추로 클릭한 다음 바로 가기 메뉴에서 참조 추가를 클릭합니다.

  2. "System.DirectoryServices.dll"에 대한 참조를 추가합니다.

  3. 도구 상자의 구성 요소 탭에서 DirectoryEntry 구성 요소 인스턴스를 디자이너로 끌어 놓습니다.

  4. DirectoryEntry 구성 요소의 Name 속성을 "entryPC"로 설정합니다.

  5. DirectoryEntry 구성 요소의 Path 속성을 WinNT://Domain/YourComputerName으로 설정합니다. DirectoryEntry 구성 요소를 가리키는 도메인 이름과 컴퓨터 이름을 사용하여 Active Directory 도메인 서비스용 WinNT 서비스 공급자를 사용하는 로컬 컴퓨터를 검사합니다.

    참고:
    잘못된 도메인 또는 컴퓨터 이름을 사용한 경우에는 응용 프로그램에서 런타임에 예외를 Throw합니다. 경로에 WinNT://YourComputerName 을 입력하면 서비스 공급자가 해당 컴퓨터를 찾습니다.

TreeView 컨트롤에 최상위 수준 노드를 추가하려면

  1. 디자이너에서 Form1을 두 번 클릭하여 코드 편집기에서 Form_Load 이벤트 처리기를 만듭니다.

  2. 사용자, 그룹, 서비스 각각에 대해 최상위 수준 노드 세 개를 만드는 데 필요한 코드를 추가하여 Form1_Load 메서드를 수정합니다. 응용 프로그램을 실행하면 경로(사용자 컴퓨터)에 있는 모든 항목이 entryPC라는 구성 요소의 Children 속성에 포함됩니다. 각 자식 개체 역시 DirectoryEntry 개체입니다. 컴퓨터 경로에서 WinNT 공급자를 사용하고 있으므로 자식 DirectoryEntry 개체의 SchemaClassName 속성은 "User", "Group" 또는 "Service" 중 하나입니다. SchemaClassName 속성에 나타난 디렉터리 항목 형식에 따라 노드를 올바른 그룹에 추가하려면 select 또는 switch 문을 사용합니다.

    AddPathAndProperties 메서드는 다음 단계에서 작성합니다.

    Private Sub Form1_Load(ByVal sender As System.Object, _
    ByVal e As System.EventArgs) Handles MyBase.Load
       Dim users As New TreeNode("Users")
       Dim groups As New TreeNode("Groups")
       Dim services As New TreeNode("Services")
       viewPC.Nodes.AddRange(New TreeNode() {users, groups, services})
    
       Dim child As System.DirectoryServices.DirectoryEntry
       For Each child In entryPC.Children
          Dim newNode As New TreeNode(child.Name)
          Select Case child.SchemaClassName
             Case "User"
                users.Nodes.Add(newNode)
             Case "Group"
                groups.Nodes.Add(newNode)
             Case "Service"
                services.Nodes.Add(newNode)
          End Select
          AddPathAndProperties(newNode, child)
       Next
    End Sub
    
    private void Form1_Load(object sender, System.EventArgs e)
    {
       TreeNode users = new TreeNode("Users");
       TreeNode groups = new TreeNode("Groups");
       TreeNode services = new TreeNode("Services");
       viewPC.Nodes.AddRange(new TreeNode[] { users, groups, services });
    
       foreach(System.DirectoryServices.DirectoryEntry child 
          in entryPC.Children) 
       {
          TreeNode newNode = new TreeNode(child.Name);
          switch (child.SchemaClassName) 
          {
             case "User" :
                users.Nodes.Add(newNode);   
                break;
             case "Group" :
                groups.Nodes.Add(newNode);   
                break;
             case "Service" :
                services.Nodes.Add(newNode);   
                break;
          }
          AddPathAndProperties(newNode, child);
       }
    }
    
  3. Form1 클래스에 다음 코드를 추가하여 AddPathAndProperties 메서드를 만듭니다. node 매개 변수는 해당 항목과 연관된 TreeNode 개체를 나타냅니다. entry 매개 변수는 디렉터리에 있는 하나의 항목 즉, 사용자, 그룹 또는 서비스를 나타냅니다.

    DirectoryEntry 구성 요소에는 문자열로 인덱싱된 속성 컬렉션을 포함하는 Properties 속성이 있습니다. 이 컬렉션의 내용은 DirectoryEntry 구성 요소의 스키마에 따라 다릅니다. 속성 컬렉션에는 모든 속성 이름의 모음인 PropertyNames 속성이 있습니다. 이 컬렉션을 단계별로 실행하여 각 속성을 검색할 수 있습니다. 각 속성에는 관련 값의 컬렉션도 있습니다. 이 메서드에서는 각 속성의 첫 번째 값만 검색합니다.

    Private Sub AddPathAndProperties(ByVal node As TreeNode, _
    ByVal entry As System.DirectoryServices.DirectoryEntry)
       node.Nodes.Add(New TreeNode("Path: " & entry.Path))
       Dim propertyNode As New TreeNode("Properties")
       node.Nodes.Add(propertyNode)
    
       Dim propertyName As String
       Dim oneNode As String
       For Each propertyName In entry.Properties.PropertyNames
          Try
             oneNode = propertyName & ": " & _
                CType(entry.Properties(propertyName)(0), String)
          Catch
             oneNode = propertyName & ": " & _
                "No text representation."
          End Try
          propertyNode.Nodes.Add(New TreeNode(oneNode))
       Next
    End Sub
    
    private void AddPathAndProperties(TreeNode node, 
       System.DirectoryServices.DirectoryEntry entry)
    {
       node.Nodes.Add(new TreeNode("Path: " + entry.Path));
       TreeNode propertyNode = new TreeNode("Properties");
       node.Nodes.Add(propertyNode);
       foreach (string propertyName in entry.Properties.PropertyNames) 
       {
          string oneNode = propertyName + ": " + 
             entry.Properties[propertyName][0].ToString();
          propertyNode.Nodes.Add(new TreeNode(oneNode));
       }
    }
    

프로그램을 실행하려면

  1. F5 키를 눌러 프로그램을 실행합니다.

  2. 노드를 열어 경로와 속성을 검사합니다. 모든 사용자는 동일한 스키마를 공유하므로 동일한 속성 집합을 공유합니다. 그룹 노드와 서비스 노드의 경우도 마찬가지입니다.

이 연습에서는 Active Directory 도메인 서비스용 WinNT 서비스 공급자를 사용했지만 LDAP(Lightweight Directory Access Protocol), NDS(Novell NetWare Directory Service) 및 NWCOMPAT(Novell Netware 3.x 서비스) 같은 다른 서비스를 사용할 수도 있습니다. 각 서비스 공급자는 사용자가 디렉터리를 검사하고 조작할 수 있는 다양한 개체 집합을 제공합니다.

DirectorySearcher를 사용하여 루트 경로의 항목을 검색할 수 있습니다. DirectorySearcher는 LDAP 공급자에서 작동합니다.

참고 항목

참조

System.DirectoryServices
DirectoryEntry
DirectorySearcher

개념

System.DirectoryServices에서 시작

Send comments about this topic to Microsoft.

Copyright © 2007 by Microsoft Corporation. All rights reserved.