次の方法で共有


チュートリアル : ローカル ディレクトリ オブジェクトの表示

このトピックの手順は、DirectoryEntry を使用してローカル コンピュータ上のユーザー、グループ、およびサービスを一覧表示する方法を示しています。DirectoryEntry は、Active Directory ドメイン サービス テクノロジを使用してこの情報にアクセスします。このコンポーネントによって作成される各エントリには、プロパティの一覧が含まれています。

ユーザー インターフェイスを作成するには

  1. [ファイル] メニューの [新規作成] をポイントし、[プロジェクト] をクリックします。

  2. [新しいプロジェクト] ダイアログ ボックスの左側のペインで、[Visual Basic .NET]、[Visual C#]、または [Visual J#] を選択し、[Windows アプリケーション] テンプレートを選択します。プロジェクトに "ActiveDirectory" という名前を付けます。

  3. ツールボックスの [Windows フォーム] タブから、TreeView コントロールを Form1 にドラッグします。

  4. TreeView コントロールの [Name] プロパティを「viewPC」に設定します。このチュートリアルでは、後でこの TreeView コントロールを変更して、ユーザー、グループ、およびサービスのそれぞれについて 1 つずつ、合計 3 つのトップレベル ノードが含まれるようにします。第 2 レベルの各ノードは、コンピュータ上に登録されている 1 人のユーザー、1 つのグループ、または 1 つのサービスを表します。各ユーザー、グループ、およびサービスには 2 つの子ノードがあります。1 つは Active Directory ドメイン サービス パスのノードで、もう 1 つはプロパティのノードです。

DirectoryEntry コンポーネントを設定するには

  1. [ソリューション エクスプローラ] で、プロジェクトを右クリックし、ショートカット メニューの [参照の追加] をクリックします。

  2. "System.DirectoryServices.dll" への参照を追加します。

  3. ツールボックスの [コンポーネント] タブから、DirectoryEntry コンポーネントのインスタンスをデザイナにドラッグします。

  4. DirectoryEntry コンポーネントの [Name] プロパティを「entryPC」に設定します。

  5. DirectoryEntry コンポーネントの [Path] プロパティを「WinNT://<ドメイン>/<コンピュータ名>」に設定します。DirectoryEntry コンポーネントが Active Directory ドメイン サービスの WinNT サービス プロバイダを使用してローカル コンピュータを調べるように、自分のドメイン名とコンピュータ名を使用します。

    ms180887.note(ja-jp,VS.90).gifメモ :
    ドメインまたはコンピュータの名前に誤りがある場合、アプリケーションは実行時に例外をスローします。パスに「WinNT://<コンピュータ名>」と入力すると、サービス プロバイダがコンピュータを検出します。

TreeView コントロールにトップレベル ノードを追加するには

  1. デザイナで、[Form1] をダブルクリックして、コード エディタに Form_Load イベント ハンドラを作成します。

  2. ユーザー、グループ、およびサービスに対して 3 つのトップレベル ノードを作成するために必要なコードを Form1_Load メソッドに追加します。このアプリケーションの実行時には、entryPC という名前のコンポーネントの Children プロパティに、Path (ローカル コンピュータ) 内のすべてのエントリが格納されます。子はそれぞれ 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 パラメータは、ディレクトリ内の 1 つのエントリ (ユーザー、グループ、またはサービスのいずれか) を表します。

    DirectoryEntry コンポーネントには、文字列のインデックスが付いたプロパティのコレクションを含む Properties プロパティがあります。このコレクションの内容は、DirectoryEntry コンポーネントのスキーマによって異なります。Properties コレクションには 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)、Novell NDS (NetWare Directory Service)、Novell Netware 3.x サービス (NWCOMPAT) などがあります。各プロバイダでは、ディレクトリの検査および操作のために提供されるオブジェクトのセットがそれぞれ異なります。

ルート パスからエントリを検索するには、DirectorySearcher を使用できます。DirectorySearcher は LDAP プロバイダで動作します。

関連項目

リファレンス

System.DirectoryServices
DirectoryEntry
DirectorySearcher

概念

System.DirectoryServices の概要

Send comments about this topic to Microsoft.

Copyright © 2007 by Microsoft Corporation. All rights reserved.