3

ActiveDirectory でユーザーのグループを取得するために DirectorySearcher を使用しています。

私の質問は、「memberOf」を使用してユーザー グループを取得したら、各グループに関連付けられた SID を取得する方法です。

私は .NETFramework 2.0 環境で作業しています。

DirectoryEntry entry = new DirectoryEntry(string.Format("LDAP://{0}", sUserDomain));
DirectorySearcher mySearcher = new DirectorySearcher(entry);
mySearcher.Filter = string.Format("(&(objectClass=user) (cn= {0}))", ui.DisplayName.ToString());
mySearcher.PropertiesToLoad.Add("memberOf");
SearchResult searchresult = mySearcher.FindOne();
4

3 に答える 3

4

memberOfは識別名を返すため、単一の LDAP 検索でそれを行う方法はありません。objectSidグループ オブジェクトから属性を取得するには、別のバインドを行う必要があります。これがコードです。

DirectoryEntry entry = new DirectoryEntry(string.Format("LDAP://{0}", sUserDomain));
DirectorySearcher mySearcher = new DirectorySearcher(entry);
mySearcher.Filter = string.Format("(&(objectClass=user) (cn= {0}))", ui.DisplayName.ToString());
mySearcher.PropertiesToLoad.Add("memberOf");
SearchResult searchresult = mySearcher.FindOne();

foreach (string dn in searchresult.Properties["memberOf"])
{
    DirectoryEntry group = new DirectoryEntry(string.Format("LDAP://{0}/{1}", sUserDomain, dn));
    SecurityIdentifier sid = new SecurityIdentifier(group.Properties["objectSid"][0] as byte[], 0);
    Console.Out.WriteLine(sid.Value);
}
于 2012-07-04T02:36:43.887 に答える
1

.NET 3.5以降を使用している場合は、System.DirectoryServices.AccountManagement(S.DS.AM)名前空間を確認する必要があります。ここでそれについてすべて読んでください:

基本的に、ドメインコンテキストを定義して、AD内のユーザーやグループを簡単に見つけることができます。

    // define context for current domain
    using(PrincipalContext ctx = new PrincipalContext(ContextType.Domain))
    {
        // find  user 
        UserPrincipal user = UserPrincipal.FindByIdentity(ctx, "YourNameHere");

        if (user != null)
        {
            // get groups the user is a member of
            var groups = current.GetGroups();

            // iterate over all those groups
            foreach(var group in groups)
            {
                // fetch the SID for each group
                var sid = group.Sid;
            }
        }
    }   

新しいS.DS.AMを使用すると、ADのユーザーやグループを簡単に操作できます。

于 2012-07-03T11:19:43.600 に答える
1

彼の記事をご覧ください: DirectoryEntryとDirectorySearcherを使用したユーザーSIDの取得

これにより、SIDを取得するための完全な実例が得られます。

于 2012-07-03T11:20:56.517 に答える