2016-08-22 10 views
0

特定のグループのすべてのユーザーをActive Directoryの特定のOUから取得したいと考えています。私のコードは私のグループ名はAryaで、OU名がある私はActive Dirctoryの特定のグループとOUからユーザーを取得します

foreach (SearchResultEntry entry in searchResponse.Entries) 

で、この例外を取得し、クライアント側のタイムアウト制限が

を超過したため、操作が中止されました

例外がスローされますTestOU

ただし、フィルタを書き込むときは

string searchFilter = "(&(objectCategory=user)" 

すべてのOUのユーザーを元に戻してもらいたいと思います。

bool bMoreData = false; 

DirectoryEntry rootDSE = new DirectoryEntry("LDAP://" + domain); 
string[] attributes = { "samaccountname", "displayname", "name", "initials" }; 

System.Net.NetworkCredential credential = new System.Net.NetworkCredential(admin, password, "IP address"); 

LdapDirectoryIdentifier directoryIdentifier = new LdapDirectoryIdentifier("ip address"); //389 (unsecured LDAP) 
LdapConnection connection = new LdapConnection(directoryIdentifier, credential); 
connection.Bind(); 

string searchFilter = "(&(objectCategory=user)(memberOf=cn=Arya,ou=TestOU,dc=Maintenance,dc=org))"; 
SearchRequest request = new SearchRequest("DC=Maintenance,DC=org", searchFilter, System.DirectoryServices.Protocols.SearchScope.Base, attributes); 
// getCookie(); 

DirSyncRequestControl dirSyncRC = new DirSyncRequestControl(cookie, System.DirectoryServices.Protocols.DirectorySynchronizationOptions.IncrementalValues, Int32.MaxValue); 
request.Controls.Add(dirSyncRC); 

SearchResponse searchResponse = (SearchResponse)connection.SendRequest(request); 

foreach (SearchResultEntry entry in searchResponse.Entries)// Exception thrown here 
{ 
    Console.WriteLine("{0}:{1}", 
    searchResponse.Entries.IndexOf(entry), 
    entry.DistinguishedName); 
} 

foreach (DirectoryControl control in searchResponse.Controls) 
{ 
    if (control is DirSyncResponseControl) 
    { 
     DirSyncResponseControl dsrc = control as DirSyncResponseControl; 
     cookie = dsrc.Cookie; 
     bMoreData = dsrc.MoreData; 
     break; 
    } 
} 
+0

この非常に低いレベルのLDAPインターフェイスを使用している理由は何ですか? –

+0

私はADサーバーと同期する必要があるローカルデータベースを持っています。これは、cookieを作成すると、次に変更されていないレコードをフェッチしません。私は上記の解決策を見つけ出し、それに動いた。フィルターを使ってこれを実現したい – user2690509

答えて

0
あなたはOUのため PrincipalContextに結合し、その後、あなたが探しているそのグループを見つけることができ

:あなたがまだの場合は

// create your domain context - bind to the OU you're interested in 
using (PrincipalContext ctx = new PrincipalContext(ContextType.Domain, null, "OU=TestOU")) 
{ 
    // define a "query-by-example" principal - here, we search for any GroupPrincipal 
    GroupPrincipal group = ctx.FindByIdentity("Arya"); 

    // if group is found - enumerate its members 
    if(group != null) 
    { 
     foreach(var found in group.GetMembers()) 
     { 
      // 
     } 
    } 
} 

を - 絶対にMSDNの記事Managing Directory Security Principals in the .NET Framework 3.5を読んで(ダウンロード可能.CHMファイル(Microsoftのファイル - 2008年1月号、MSDN Magazine)は、System.DirectoryServices.AccountManagementの新機能の使い方をうまく示しています。またはMSDN documentation on the System.DirectoryServices.AccountManagement名前空間を参照してください。

1

それは私のために働いて、それを交換したとき、私は下の行

DirSyncRequestControl dirSyncRC = new DirSyncRequestControl(cookie, System.DirectoryServices.Protocols.DirectorySynchronizationOptions.IncrementalValues, Int32.MaxValue); 

に問題があることを発見しました。

DirSyncRequestControl dirSyncRC = new DirSyncRequestControl(cookie, System.DirectoryServices.Protocols.DirectorySynchronizationOptions.ObjectSecurity, Int32.MaxValue); 
関連する問題