2011-07-16 21 views
9

私は、特定のADグループのすべてのメンバーを取得するC#4.0プログラムの作業を持っています。このADグループには、他のメンバーを含む他のADグループがあります。私はそれがグループであることを識別し、そのグループのメンバーを検索するためのプログラムが必要です。Active Directoryのネストされたグループ

私は、再帰的なプログラムを記述する必要が知っているが、私はそこに誰かがすでにそれを行っているかもしれません期待していました。もしそうでなければ、誰かがADプロパティ属性を教えてメンバーが実際にグループであることを特定できますか?

+0

このリンクは役立ちます:http://en.csharp-online.net/User_Management_with_Active_Directory%E2%80%94Retrieving_tokenGroups_from_ADAM –

答えて

-1

あなたがのActiveDirectoryにLDAPビューを使用していると仮定すると、あなたが探している属性は、「オブジェクトクラス」と呼ばれています。グループは、 "groupOfNames"のobjectClassで表示されます。おそらく "グループ"。あるいは、オブジェクトクラスにかかわらず、オブジェクトに「メンバー」があるかどうかを調べて、そうであれば、それが何らかのグループのものであり、再帰していると仮定します。

13

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

を基本的には、ドメインコンテキストを定義し、簡単にADのユーザーおよび/またはグループを見つけることができます。また、GroupPrincipalには、GetMembersというメソッドがあり、そのグループのすべてのメンバーがリストされます。オプションで、再帰的に実行されます。

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

// find the group you're interested in 
GroupPrincipal myGroup = GroupPrincipal.FindByIdentity(ctx, "SomeGroup"); 

// if you found it - get its members 
if (myGroup != null) 
{ 
    // if your call the GetMembers, you can optionally specify a "Recursive" flag - done here 
    var allMembers = myGroup.GetMembers(true); 
} 

新しく追加されたS.DS.AMは、ADのユーザーとグループで本当に簡単に遊べます!

+0

S.DS.AMのヒントありがとうございます。それはちょうど私に再帰的なプログラムを書くことの苦痛を救った!! –

+0

'GetMembers(true)'には制限があります。 'Domain Users'はまったく返されません。それらを取得するには、 'GetMembers(false)'を再帰的に呼び出す必要があります。 –

+0

@WernfriedDomscheit他の制限は何ですか? –

関連する問題