[DirectorySearcher][Tips] アカウント名から名前を取得する


今回はDirectorySearcherコンポーネントを使用して、アカウント名から名前を取得する方法を紹介します。

手順は下記の通りです。

  1. DirectoryEntryクラス(またはコンポーネント)を使用して、ActiveDirectoryに接続する
  2. 指定した検索ルート(DirectoryEntry)でDirectorySearcherのインスタンスを作成する
  3. Filterプロパティにフィルターの設定する
    “(objectClass=user)” などの LDAP 書式の検索フィルタ文字列 を指定します。
    ここではアカウント名からデータを取得するので “(&(objectClass=user)(sAMAccountName=アカウント名))”とします。
  4.  DirectorySearcherのPropertiesToLoadプロパティAddメソッドに、検索で取得する値(ここではname)を指定する。
  5. DirectorySearcherのSearcheScopeプロパティに検索範囲を指定する
    ここではサブツリー全体を指定するのでSubtreeとする
  6. DirectorySearcherのFindOneメソッドを使用して、最初に見つかったアイテムを取得する
    見つかったすべての アイテムを取得したい場合はFindAllメソッドを使用する
    戻り値はSearchResult型 
  7. 取得したSearchResult型のデータのPropertiesプロパティに、取得する項目(ここではname)を指定し、データ尾を取得する

下記は、アカウント名から名前を取得する例です。

アカウント名HIROの名前を取得します。

VBの例

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    'ActiveDirectoryに接続
    Dim myEntry = New System.DirectoryServices.DirectoryEntry()
    myEntry.Path = "LDAP://corp.contoso.com"

    '指定した検索ルート(DirectoryEntry)でDirectorySearcherのインスタンスを作成
    Using ds As New System.DirectoryServices.DirectorySearcher(myEntry)
        Dim filter As String = "(&(objectClass=user)(sAMAccountName={0}))"

        'フィルターの設定
        ds.Filter = String.Format(Filter, "HIRO")
        ds.SizeLimit = 1

        '検索で取得する値
        ds.PropertiesToLoad.Add("name")

        '検索範囲をサブツリー全体にする
        ds.SearchScope = System.DirectoryServices.SearchScope.Subtree

        Try
            '最初に見つかったアイテムのみを取得する
            Dim result As System.DirectoryServices.SearchResult = ds.FindOne()

            '名前(name)を取得する
            Dim name As String = result.Properties("name")(0).ToString()

            MessageBox.Show(name)
        Catch ex As Exception
            MessageBox.Show(ex.Message)
        End Try
    End Using
End Sub

C#の例

// フォームロード時の処理
private void Form1_Load(object sender, EventArgs e)
{                     
    //ActiveDirectoryに接続
    System.DirectoryServices.DirectoryEntry myEntry = new System.DirectoryServices.DirectoryEntry();
    myEntry.Path = "LDAP://corp.contoso.com";

    // 指定した検索ルート(DirectoryEntry)でDirectorySearcherのインスタンスを作成
    using (System.DirectoryServices.DirectorySearcher ds = new System.DirectoryServices.DirectorySearcher(myEntry))
    {
        string filter = "(&(objectClass=user)(sAMAccountName={0}))";

        // フィルターの設定
        ds.Filter = string.Format(filter, "HIRO");
        ds.SizeLimit = 1;

        // 検索で取得する値
        ds.PropertiesToLoad.Add("name");

        // 検索範囲をサブツリー全体にする
        ds.SearchScope = System.DirectoryServices.SearchScope.Subtree;
        try
        {
            // 最初に見つかったアイテムのみを取得する
            System.DirectoryServices.SearchResult result = ds.FindOne();

            // 名前(name)を取得する
            string name = (string)result.Properties["name"][0];

            MessageBox.Show(name);
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }
    }
}

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です