今回はDirectorySearcherコンポーネントを使用して、アカウント名から名前を取得する方法を紹介します。
手順は下記の通りです。
- DirectoryEntryクラス(またはコンポーネント)を使用して、ActiveDirectoryに接続する
- 指定した検索ルート(DirectoryEntry)でDirectorySearcherのインスタンスを作成する
- Filterプロパティにフィルターの設定する
“(objectClass=user)” などの LDAP 書式の検索フィルタ文字列 を指定します。
ここではアカウント名からデータを取得するので “(&(objectClass=user)(sAMAccountName=アカウント名))”とします。 - DirectorySearcherのPropertiesToLoadプロパティのAddメソッドに、検索で取得する値(ここではname)を指定する。
- DirectorySearcherのSearcheScopeプロパティに検索範囲を指定する
ここではサブツリー全体を指定するのでSubtreeとする - DirectorySearcherのFindOneメソッドを使用して、最初に見つかったアイテムを取得する
見つかったすべての アイテムを取得したい場合はFindAllメソッドを使用する
戻り値はSearchResult型 - 取得した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); } } }
Please follow and like us:
コメント