今回は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:

コメント