2012-04-02 5 views
1

次のコードを使用して、アクティブディレクトリユーザのグループを取得しています。Domain Usersグループがアクティブなディレクトリユーザのために取得していません

StringCollection groups = new StringCollection(); 

try 
{ 
    using (PrincipalContext pc = new PrincipalContext(ContextType.Domain, domainName, userName, password)) 
    { 
     //find user roles 
     UserPrincipal user = UserPrincipal.FindByIdentity(pc, IdentityType.SamAccountName, loginUserName); 

     if (user != null) 
     { 
     DirectoryEntry de = (DirectoryEntry)user.GetUnderlyingObject(); 
     object obGroups = de.Invoke("Groups");       

     foreach (object ob in (IEnumerable)obGroups) 
     { 
      DirectoryEntry obGpEntry = new DirectoryEntry(ob);        
      groups.Add(obGpEntry.Name); 
     }  
     } 
    } 
} 
catch (Exception e) 
{ 
} 

これはほぼ同じように動作します。しかし、ユーザがDomain Usersグループをチェックしている間に、メソッドはグループ名を返しませんでした。一部のユーザーはこのDomain Usersグループのみを使用していますが、そのユーザーに対してこのメ​​ソッドを呼び出して空のグループを返しています。

任意の提案をしてください。..

答えて

2

これは、いわゆるプライマリ・グループがないは、このコードでGroupsメソッドから返さであることはよく知られ、文書化「不作為」です。

.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) 
{ 
    // the call to .GetAuthorizationGroups() will return **all** groups that 
    // user is a member of - including the primary group and all nested 
    // group memberships, too! 
    var result = user.GetAuthorizationGroups(); 
} 

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

更新:古いレガシー技術を使う、という場合は、C#でADアカウントのプライマリグループを取得する方法を詳細に説明してthis blog post by Ryan Dunnをチェックしてください。

+0

はい、私は以前これを使用しましたが、「ドメインに関する情報を取得できませんでした(1355)」などのエラーが表示されます)。私は原因を理解することができないので、私は古い技術を使用するように移動しました。 –

+0

指定されたリンクは現在404エラーを表示していますhttp://dunnry.com/blog/2005/01/18/DeterminingYourPrimaryGroupInActiveDirectoryUsingNET.aspx%24 –

+0

@mahesh:申し訳ありません、貼り付けた後に余分な文字がありました。 –

関連する問題