3

プライマリグループを含め、ユーザーが属するすべてのグループを取得しようとしています。

このようなことをする:

DirectoryEntry entry = new DirectoryEntry(LDAP:/domainXYZ, userx, passwordx); 
DirectorySearcher searcher = new DirectorySearcher(entry);
searcher.Filter = String.Format("(&(objectClass=user)(userPrincipalName={0}{1}))", userY, LDAP://domainXYZ);
SearchResultCollection resultColln= searcher.FindOne();

string actualGroupName =string.empty;
string grp ="";
foreach (SearchResult singleRes in resultColln)
{
   foreach (object value in singleRes.Properties["memberof"])
   {
       grp = value.ToString();
       Console.WriteLine("group:{0} ", grp);
   }
}

これにより、プライマリグループを除くすべてのグループが得られます。他のグループに加えてを使用して、プライマリグループprimaryGroupIDを取得する方法はありますか?

4

1 に答える 1

1

次の検索フィルターを使用して別の検索を実行する必要があります

string.Format("(&(objectCategory=group)(objectClass=group)(primaryGroupToken={0}))", singleRes.Properties["primaryGroupID"]);

primaryGroupTokenグループの作成時にActiveDirectoryによって自動的に生成される計算属性です。ユーザーに割り当てられているのprimaryGroupIDは、この値を格納していることです。

実際、本当に簡単な方法が必要な場合は、 UserPrincipal.GetGroupsが本当に簡単であることをお勧めします。唯一のことは、.NET3.5以降でのみ見つけることができるということです。

using (PrincipalContext context = new PrincipalContext(ContextType.Domain, "yourdomain.com"))
{
    using (UserPrincipal user = UserPrincipal.FindByIdentity(context, IdentityType.SamAccountName, "YourUser"))
    {
        foreach (Principal p in user.GetGroups())
        {
             Console.WriteLine(p.Name);
        }
    }
 }

GetGroupsプライマリグループを含め、ユーザーをすぐに含むグループのみを返します。ネストされたすべてのグループを取得する場合は、を使用できますGetAuthorizationGroups

于 2011-03-14T22:15:05.877 に答える