2011-06-24 12 views
6

Active Directoryにユーザーを照会するときに、コンピュータ用に作成されたユーザーアカウントを除外する方法はありますか?理想的には、最も一般的なネットワークで共通する方法です。例えば:"人のユーザーアカウント"と "コンピュータのユーザーアカウント"を区別する方法はありますか?

DirectorySearcher ds = new DirectorySearcher(new DirectoryEntry([Users_OU_root]));  
ds.filter = "(&(objectClass=User)([CRITERIA_TO_FILTER_OUT_COMPUTER_USER_ACCOUNTS]))";  
ds.FindAll();  
... 

答えて

6

は、.NET 3.5とアップにしている場合は、あなたがSystem.DirectoryServices.AccountManagement(S.DS.AM)名前空間をチェックアウトする必要があります。ここではそれについてのすべてを読む:

基本的に、あなたはドメインコンテキストを定義し、簡単にADのユーザーおよび/またはグループを見つけることができます:

// set up domain context 
PrincipalContext ctx = new PrincipalContext(ContextType.Domain); 

// find a user 
UserPrincipal user = UserPrincipal.FindByIdentity(ctx, "SomeUserName"); 

if(user != null) 
{ 
    // do something here....  
} 

// find the group in question 
GroupPrincipal group = GroupPrincipal.FindByIdentity(ctx, "YourGroupNameHere"); 

// if found.... 
if (group != null) 
{ 
    // iterate over members 
    foreach (Principal p in group.GetMembers()) 
    { 
     Console.WriteLine("{0}: {1}", p.StructuralObjectClass, p.DisplayName); 
     // do whatever you need to do to those members 
    } 
} 

新しいS.DS.AMにより、ADのユーザーとグループで簡単に遊ぶことができます。

コンピュータアカウントは、(Principalから派生)と表示されるので、簡単にユーザーとコンピュータアカウントを分け合わせることができます。

S.DS.AMに移動できない、または移動したくない場合は、LDAPフィルタのobjectClassの代わりにobjectCategoryを使用して、ユーザーとコンピュータを分けておくこともできます。 objectCategoryは、索引付けされていて多値ではないため、とにかく有益です。そのため、クエリのパフォーマンスははるかに向上します。

現実のユーザーの場合はobjectCategory = Personを使用し、コンピュータの場合はLDAPフィルタにobjectCategory = Computerを使用します。

3

回答に同意しても。 Active DirectoryはLDAPサーバーのままです。ここではあなたが探しているフィルタされています

(&(objectCategory=user)(objectClass=user)(...)) 

objectCategory=userは、」アクティブ・ディレクトリが理解「objectCategory=CN=User,CN=Schema,CN=Configuration,DC=dom,DC=fr」のショートカットですが、それは私も別の場合、答えを置く理由です、他のディレクトリにも方法です答えは受け入れられる。

関連する問題