2016-08-23 13 views
0

ADグループメンバーを確認するための小さなアプリを書いた。自分のPC上で以下のコードを実行すると、それはうまくいきます。SearchResultには「メンバー」プロパティが含まれていますが、サーバー上または別のコンピュータ上で同じexeを実行すると、「メンバー」プロパティが表示されません。 usnchangedとusncreatedも異なるでしょう。私はすべてのPC上で同じユーザーとexeを実行します。何が原因でしょうか?DirectorySearcherと異なる結果

... 
using (DirectorySearcher searcher = new DirectorySearcher()) 
{ 
    searcher.CacheResults = false; 
    searcher.Filter = "(&(objectClass=group)(cn=" + ADName + "))"; 
    searcher.SizeLimit = int.MaxValue; 
    searcher.PageSize = int.MaxValue; 
    if (!DirectoryEntry.Exists(ADPath)) 
    { 
     return null; 
    } 
    searcher.SearchRoot = new DirectoryEntry(ADPath); 
    using (SearchResultCollection collection = searcher.FindAll()) 
    { 
     if (collection.Count == 1) 
     { 
      return collection[0]; 
     } 
    } 
} 
... 
+0

ADPathでは、アクティブなディレクトリサーバーを指していますか? – rene

+0

ADPathは "GC:// DC = DOMAIN、DC = COMPANY、DC = com" –

答えて

0

グループメンバシップデータはグローバルカタログにレプリケートされません。実際のメンバーシップデータを使用してドメインコントローラに接続すると、クエリが動作することがあります。他のマシンでは、ドメインが異なる他のドメインコントローラに接続している可能性があります。

グローバルカタログではなく、実際のドメインのドメインコントローラに接続したい場合があります。

+0

ですが、正しく動作しているので、ADPathは "GC:// Domain_Controller_IP/DC = DOMAIN 、DC = COMPANY、DC = com」と表示されます。 しかし、正しいドメインコントローラを決定するには、サーバー上でecho%LOGONSERVER%をcmdから実行すると、ローカルのpcとは異なる出力が表示されるためです。もちろん、コントローラを別のドメインから実行してもコントローラは異なるでしょう。 簡単な方法は、ipをハードコードすることですが、私はそれを望んでいません。 –

+0

IPを指定する必要はありません。 "LDAP:// Domain_Controller_Address/DC = DOMAIN、DC = COMPANY、DC = com"のようなものを使用できます。 – Tomer

+0

すべての権利、新しいPrincipalContext(ContextType.Domain、DOMAIN).ConnectedServerには正しいアドレスが含まれています。迅速なサポートをありがとう! –