2010-12-31 27 views
1

ユーザーが8人のグループ名「CommonUsers」を持つActive Directoryドメイン名「ADDOMAIN2」を作成しました。グループ「CommonUsers」内のユーザーのディレクトリ検索を実行すると、結果はゼロになります。彼女のコードはActive Directoryグループからユーザーを取得

 DirectorySearcher searcher = new DirectorySearcher(); 
     DirectoryEntry directoryEntry = new DirectoryEntry(string.Format("LDAP://{0}", "ADDOMAIN2"), "Administrator", "[email protected]$w0rd"); 
     string dnPath = directoryEntry.Properties["distinguishedName"].Value.ToString(); 

     // string path = string.Format("LDAP://{0}/{1}{2}", "ADDOMAIN2", "", dnPath); 
     string path = "LDAP://ADDOMAIN2/CN=CommonUsers,DC=ADDomain2,DC=ADDomain01,DC=WaveDomain"; 
     directoryEntry.Path = path; 
     searcher.SearchRoot = directoryEntry; 
     searcher.Filter = "(&(objectCategory=person)(objectClass=user))"; 
     SearchResultCollection rs = searcher.FindAll(); 

ここで何が間違っていますか?

ありがとう

+0

私の答えを確認しましたか?それは役に立ちましたか?任意のコメント? –

答えて

0

は、クエリ文字列が本当に正しい場所を指しているかどうかをチェックする(Softerra LDAP Browserの古いものと無償バージョン2.6のような)いくつかの外部LDAPブラウザを使用してみてください。

0

DirectorySearcherは、グループ内のユーザーの検索には使用されません。これは、基本パスの下にあるオブジェクトを見つけるために使用されます。あなたのADグループオブジェクトの下に置かれたユーザーオブジェクトはないので、何も見つかりません。

ほとんどの場合、ADグループ内のユーザーオブジェクトはメンバー属性から検索できます。 ADグループには、グループまたはユーザーのいずれかを含めることができます。だから、いくつかのエントリーがグループになるかもしれない。場合によっては、メンバー属性にADグループもADユーザーも含まれていないため、外部セキュリティプリンシパルが含まれています。これは、ユーザーが別のフォレストから来ている場合に発生します。プライマリグループの処理も異なります。 「ドメインユーザー」でさえ、ADのほとんどのユーザーのプライマリグループであり、メンバー属性には何も含まれていません。 ADグループオブジェクトを実際に難しいものにする多くの奇妙なことがあります。

幸いなことに、.NET 3.5では、Microsoftがフレームワークでいくつかの便利なクラスを提供しています。いくつかの簡単な例を取得するには

System.DirectoryServices.AccountManagementをチェックアウト、あなたはarticle

あなたのコードは次のようなものである必要があり、このCodeProjectのをチェックアウトすることができます。

PrincipalContext context = new PrincipalContext(ContextType.Domain, "yourdomain.com"); 
GroupPrincipal groupPrincipal = GroupPrincipal.FindByIdentity(context, IdentityType.SamAccountName, "Domain Users"); 
foreach (Principal principal in groupPrincipal.GetMembers(false)) 
{ 
    Console.Out.WriteLine(principal.DistinguishedName); 
} 
Console.In.ReadLine(); 
関連する問題