アクティブ ディレクトリからユーザーのリストを取得するにはどうすればよいでしょうか? ユーザー名、名、姓を取得する方法はありますか? 同様の投稿で、次のようなものが使用されていました:
PrincipalContext ctx = new PrincipalContext(ContextType.Domain, "YOURDOMAIN");
私は Active Directory を一度も使用したことがないので、まったくわかりません。どなたか助けていただければ幸いです。
ベストアンサー1
Active Directory を初めて使用する場合は、まず Active Directory がデータをどのように保存するかを理解することをお勧めします。
Active Directoryは実際にはLDAPサーバーです。LDAPサーバーに保存されるオブジェクトは階層的に格納されます。これは、ファイルシステムにファイルを保存するのと非常に似ています。そのため、この名前が付けられました。ディレクトリサーバーとアクティブディレクトリ
Active Directory 上のコンテナーとオブジェクトは で指定できますdistinguished name
。識別名は のようになりますCN=SomeName,CN=SomeDirectory,DC=yourdomain,DC=com
。従来のリレーショナル データベースと同様に、LDAP サーバーに対してクエリを実行できます。これは LDAP クエリと呼ばれます。
.NETでLDAPクエリを実行する方法はいくつかあります。ディレクトリサーチャーからSystem.DirectoryServices
または検索リクエストからSystem.DirectoryServices.Protocol
。
あなたの質問では、ユーザープリンシパルオブジェクトを具体的に見つけることを求められているので、最も直感的な方法は、プリンシパルサーチャーからSystem.DirectoryServices.AccountManagement
。Google でさまざまな例を簡単に見つけることができます。これはまさにあなたが求めているものを実行しているサンプルです。
using (var context = new PrincipalContext(ContextType.Domain, "yourdomain.com"))
{
using (var searcher = new PrincipalSearcher(new UserPrincipal(context)))
{
foreach (var result in searcher.FindAll())
{
DirectoryEntry de = result.GetUnderlyingObject() as DirectoryEntry;
Console.WriteLine("First Name: " + de.Properties["givenName"].Value);
Console.WriteLine("Last Name : " + de.Properties["sn"].Value);
Console.WriteLine("SAM account name : " + de.Properties["samAccountName"].Value);
Console.WriteLine("User principal name: " + de.Properties["userPrincipalName"].Value);
Console.WriteLine();
}
}
}
Console.ReadLine();
AD ユーザー オブジェクトには、いくつかの属性があることに注意してください。特に、givenName
は を提供しFirst Name
、sn
は を提供しますLast Name
。ユーザー名について。ユーザー ログオン名を意味していると思います。AD ユーザー オブジェクトには 2 つのログオン名があることに注意してください。1 つは でsamAccountName
、これは Windows 2000 より前のユーザー ログオン名とも呼ばれます。は、userPrincipalName
Windows 2000 以降で一般的に使用されます。