A More Complex Sample Application


The companion files include a more complex sample application. It is a console application that can expose the groups that a computer or a user is a member of. This code shows a number of techniques for using the DirectoryServices library. First is the use of the schemafilter property, which allows you to filter containers based on schemas of objects in the container. Second is the use of the Invoke method to call a native method on Active Directory. Here is the code from the sample application:

 using System; using System.DirectoryServices; using System.Reflection; using System.Collections;      namespace ADSI_Console_App {    /// <summary>    /// Summary description for Class1.    /// </summary>    class Class1    {       /// <summary>       /// The main entry point for the application.       /// </summary>       [STAThread]       static void Main(string[] args)       {          try          {             //Replace thomriznt5dom2 with your domain             GroupsMembers("WinNT://thomriznt5dom2/thomriznt52,computer");             // groups in computer             UserGroups("LDAP:// CN=Thomas Rizzo,CN=Users,DC=thomriznt5dom2,DC=extest,DC=microsoft,DC=com");             // local groups member             UserGroups("WinNT://thomriznt5dom2/thomriz,user");             // local groups member          }          catch (Exception e)          {             Console.WriteLine("*** Exception: " + e);          }          return;       }            // ----------------------------------------       // Get all members for groups in given root.       static void GroupsMembers(string root_name)       {          Console.WriteLine("");          Console.WriteLine(" --- Groups Members in: " + root_name);               DirectoryEntry entryMachine = new DirectoryEntry(root_name);          entryMachine.Children.SchemaFilter.Add("group");               int kg = 0;          foreach ( DirectoryEntry grp in entryMachine.Children )          {             Console.WriteLine("group: " + grp.Name);             object members = grp.Invoke("Members");             // IADsGroup method call                  if ( ++kg > 12 ) break;   // stop long output             foreach ( object member in (IEnumerable)members)             {                try                {                   DirectoryEntry memberEntry = new DirectoryEntry(member);                   // 'member' is an IAds ptr object                   Console.WriteLine("   member = " + memberEntry .Name);                }                catch (System.Runtime.InteropServices.COMException e)                {                   Console.WriteLine("   !!! Bad Member. Hr: 0x" +                   Convert.ToString(e.ErrorCode,16) + " - " + e.Message);                }             }          }          Console.WriteLine("----");       }            // ----------------------------------------       // Get all groups which a user is member of.       static void UserGroups(string user_name)       {          Console.WriteLine("");          Console.WriteLine("--- User: " + user_name +             " is the member of: ");               DirectoryEntry entryUser = new DirectoryEntry(user_name);                    object groups = entryUser.Invoke("Groups");          // IADsUser method call               foreach ( object group in (IEnumerable)groups)          {             DirectoryEntry groupEntry  = new DirectoryEntry(group);             // 'group' is an IAds ptr object             Console.WriteLine("  group = " + groupEntry.Name);          }          Console.WriteLine(" --- ");       }    } } 



Programming Microsoft Outlook and Microsoft Exchange 2003
Programming MicrosoftВ® OutlookВ® and Microsoft Exchange 2003, Third Edition (Pro-Developer)
ISBN: 0735614644
EAN: 2147483647
Year: 2003
Pages: 227
Authors: Thomas Rizzo

flylib.com © 2008-2017.
If you may any questions please contact us: flylib@qtcs.net