Csharp/C Sharp/Web Services/Active Directory

Материал из .Net Framework эксперт
Перейти к: навигация, поиск

DirectoryEntry and DirectoryEntries

<source lang="csharp">

using System; using System.DirectoryServices; public class RemoveObject {

  public static void Main()
  {
     DirectoryEntry de = new DirectoryEntry(
       "LDAP://192.168.1.100/ou=accounting, dc=ispnet1, dc=net",
        "cn=Administrator, dc=ispnet1, dc=net", "password",
        AuthenticationTypes.ServerBind);
     DirectoryEntries children = de.Children;
     try
     {
        DirectoryEntry badObject = children.Find("ou=auditing");
        children.Remove(badObject);
        de.rumitChanges();
        Console.WriteLine("the object was removed");
     } catch (Exception)
     {
        Console.WriteLine("the object was not found");
     }
  }

}

      </source>


DirectoryEntry Get Properties

<source lang="csharp"> using System; using System.DirectoryServices; public class GetProperties {

  public static void Main()
  {
     DirectoryEntry de = new DirectoryEntry(
        "LDAP://192.168.1.100/cn=kblum, ou=sales, dc=ispnet1, dc=net");
     Console.WriteLine("object: {0}", de.Path);
     PropertyCollection pc = de.Properties;
     foreach(string propName in pc.PropertyNames)
     {
        foreach(object value in de.Properties[propName])
           Console.WriteLine("  property = {0}   value = {1}",
              propName, value);
     }
  }

}

      </source>


DirectoryEntry : List Objects

<source lang="csharp"> using System; using System.Collections; using System.DirectoryServices; public class ListObjects {

  public static void Main()
  {
     DirectoryEntry de = new DirectoryEntry(
       "LDAP://192.168.1.100/dc=ispnet1, dc=net");
     Console.WriteLine(de.Path);
     DirectoryEntries des = de.Children;
     foreach(DirectoryEntry entry in des)
     {
        Console.WriteLine("  child: " + entry.Name);
     }
  }

}


      </source>


DirectoryEntry Rename Object

<source lang="csharp"> using System; using System.DirectoryServices; public class RenameObject {

  public static void Main()
  {
     DirectoryEntry de = new DirectoryEntry(
       "LDAP://192.168.1.100/ou=auditing, ou=accounting, dc=ispnet1, dc=net",
       "cn=Administrator, dc=ispnet1, dc=net", "password",
       AuthenticationTypes.ServerBind);
     DirectoryEntries des = de.Children;
     DirectoryEntry badObject = des.Find("cn=test");
     badObject.Rename("cn=testing");
     de.rumitChanges();
     de.Close();
  }

}


      </source>


DirectoryServices: Add Object

<source lang="csharp">

using System; using System.DirectoryServices; public class AddObject {

  public static void Main()
  {
     DirectoryEntry de = new DirectoryEntry(
       "LDAP://192.168.1.100/ou=accounting, dc=ispnet1, dc=net",
        "cn=Administrator, dc=ispnet1, dc=net", "password",
        AuthenticationTypes.ServerBind);
     DirectoryEntries children = de.Children;
     DirectoryEntry newchild = children.Add("ou=auditing", de.SchemaClassName);
     newchild.Properties["ou"].Add("Auditing Department");
     newchild.rumitChanges();
     newchild.Close();
     de.Close();
     DirectoryEntry de2 = new DirectoryEntry(
      "LDAP://192.168.1.100/ou=auditing, dc=accounting, dc=ispnet1, dc=net");
     string newpath = de2.Path;
     Console.WriteLine("new path: {0}", newpath);
     de2.Close();
  }

}

      </source>


DirectoryServices: Add Property

<source lang="csharp">

using System; using System.DirectoryServices; public class AddProperty {

  public static void Main()
  {
     DirectoryEntry de = new DirectoryEntry(
       "LDAP://192.168.1.100/cn=kblum, ou=sales, dc=ispnet1, dc=net",
       "cn=Administrator, dc=ispnet1, dc=net","password",
       AuthenticationTypes.ServerBind);
     de.Properties["telephoneNumber"].Add("(111)222-3333");
     de.Properties["telephoneNumber"].Add("(444)555-6666");
     de.rumitChanges();
     de.Close();
  }

}

      </source>


DirectoryServices Bind Object

<source lang="csharp"> using System; using System.DirectoryServices; public class BindObject {

  public static void Main()
  {
     DirectoryEntry de = new DirectoryEntry(
         "LDAP://192.168.1.100/dc=ispnet1, dc=net");
     string ldappath = de.Path;
     Console.WriteLine("The LDAP path is: {0}", ldappath);
     de.Close();
  }

}

      </source>


DirectoryServices: Delete Object

<source lang="csharp"> using System; using System.DirectoryServices; public class DeleteObject {

  public static void Main()
  {
     DirectoryEntry de = new DirectoryEntry(
       "LDAP://192.168.1.100/ou=accounting, dc=ispnet1, dc=net",
       "cn=Administrator, dc=ispnet1, dc=net", "password",
       AuthenticationTypes.ServerBind);
     DirectoryEntries children = de.Children;
     try
     {
        DirectoryEntry badObject = children.Find("ou=auditing");
        badObject.DeleteTree();
        de.rumitChanges();
        Console.WriteLine("the object has been deleted");
     } catch (Exception e)
     {
        Console.WriteLine("the object was not found or deleted:");
        Console.WriteLine(e.ToString());
     }
  }

}

      </source>


DirectoryServices DirectoryEntry

<source lang="csharp"> using System; using System.Net; using System.DirectoryServices; using System.DirectoryServices.Protocols; public class MainClass {

   public static void Main() {
       using (DirectoryEntry de = new DirectoryEntry()) {
           de.Path = "LDAP://yourSite/rootDSE";
           de.Username = @"explorer\chris";
           de.Password = "password";
           PropertyCollection props = de.Properties;
           foreach (string prop in props.PropertyNames) {
               PropertyValueCollection values = props[prop];
               foreach (string val in values) {
                   Console.Write(prop + ": ");
                   Console.WriteLine(val);
               }
           }
       }
   }

}

</source>


DirectoryServices GUI

<source lang="csharp"> using System; using System.Collections.Generic; using System.ruponentModel; using System.Drawing; using System.Windows.Forms; using System.Text; using System.DirectoryServices; public class UserSearchForm : Form {

   private string username;
   private string password;
   private string hostname;
   private string schemaNamingContext;
   private string defaultNamingContext;
   public UserSearchForm() {
       InitializeComponent();
   }
   protected void SetLogonInformation() {
       username = (textBoxUsername.Text == "" ? null : textBoxUsername.Text);
       password = (textBoxPassword.Text == "" ? null : textBoxPassword.Text);
       hostname = textBoxHostname.Text;
       if (hostname != "") hostname += "/";
   }
   protected void SetNamingContext() {
       using (DirectoryEntry de = new DirectoryEntry()) {
           string path = "LDAP://" + hostname + "root";
           de.Username = username;
           de.Password = password;
           de.Path = path;
           schemaNamingContext = de.Properties["schemaNamingContext"][0].ToString();
           defaultNamingContext = de.Properties["defaultNamingContext"][0].ToString();
       }
   }
   protected void SetUserProperties(string schemaNamingContext) {
       List<string> properties = new List<string>();
       string[] data = GetSchemaProperties(schemaNamingContext, "User");
       properties.AddRange(GetSchemaProperties(schemaNamingContext, "Organizational-Person"));
       listBoxProperties.Items.Clear();
       foreach (string s in properties) {
           listBoxProperties.Items.Add(s);
       }
   }
   protected string[] GetSchemaProperties(string schemaNamingContext, string objectType) {
       string[] data;
       using (DirectoryEntry de = new DirectoryEntry()) {
           de.Username = username;
           de.Password = password;
           de.Path = "LDAP://" + hostname + "CN=" + objectType + "," + schemaNamingContext;
           PropertyCollection properties = de.Properties;
           PropertyValueCollection values = properties["systemMayContain"];
           data = new String[values.Count];
           values.CopyTo(data, 0);
       }
       return data;
   }
   private void OnLoadProperties(object sender, EventArgs e) {
       SetLogonInformation();
       SetNamingContext();
       SetUserProperties(schemaNamingContext);
   }
   private void OnSearch(object sender, EventArgs e) {
       FillResult();
   }
   protected string[] GetProperties() {
       string[] properties = new string[listBoxProperties.SelectedItems.Count];
       int i = 0;
       foreach (string s in listBoxProperties.SelectedItems) {
           properties[i++] = s;
       }
       return properties;
   }
   protected void FillResult() {
       using (DirectoryEntry root = new DirectoryEntry()) {
           root.Username = username;
           root.Password = password;
           root.Path = "LDAP://" + hostname + defaultNamingContext;
           using (DirectorySearcher searcher = new DirectorySearcher()) {
               searcher.SearchRoot = root;
               searcher.SearchScope = SearchScope.Subtree;
               searcher.Filter = textBoxFilter.Text;
               searcher.PropertiesToLoad.AddRange(GetProperties());
               SearchResultCollection results = searcher.FindAll();
               StringBuilder summary = new StringBuilder();
               foreach (SearchResult result in results) {
                   foreach (string propName in result.Properties.PropertyNames) {
                       foreach (string s in result.Properties[propName]) {
                           summary.Append(" " + propName + ": " + s + "\r\n");
                       }
                   }
                   summary.Append("\r\n");
               }
               textBoxResults.Text = summary.ToString();
           }
       }
   }
   private void InitializeComponent() {
       this.splitContainer1 = new System.Windows.Forms.SplitContainer();
       this.buttonSearch = new System.Windows.Forms.Button();
       this.label9 = new System.Windows.Forms.Label();
       this.textBoxFilter = new System.Windows.Forms.TextBox();
       this.label8 = new System.Windows.Forms.Label();
       this.label7 = new System.Windows.Forms.Label();
       this.listBoxProperties = new System.Windows.Forms.ListBox();
       this.label6 = new System.Windows.Forms.Label();
       this.buttonLoadProperties = new System.Windows.Forms.Button();
       this.label5 = new System.Windows.Forms.Label();
       this.groupBox1 = new System.Windows.Forms.GroupBox();
       this.textBoxPassword = new System.Windows.Forms.TextBox();
       this.textBoxUsername = new System.Windows.Forms.TextBox();
       this.label4 = new System.Windows.Forms.Label();
       this.label3 = new System.Windows.Forms.Label();
       this.textBoxHostname = new System.Windows.Forms.TextBox();
       this.label2 = new System.Windows.Forms.Label();
       this.label1 = new System.Windows.Forms.Label();
       this.textBoxResults = new System.Windows.Forms.TextBox();
       this.splitContainer1.Panel1.SuspendLayout();
       this.splitContainer1.Panel2.SuspendLayout();
       this.splitContainer1.SuspendLayout();
       this.groupBox1.SuspendLayout();
       this.SuspendLayout();
       // 
       // splitContainer1
       // 
       this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill;
       this.splitContainer1.Location = new System.Drawing.Point(0, 0);
       this.splitContainer1.Name = "splitContainer1";
       // 
       // Panel1
       // 
       this.splitContainer1.Panel1.Controls.Add(this.buttonSearch);
       this.splitContainer1.Panel1.Controls.Add(this.label9);
       this.splitContainer1.Panel1.Controls.Add(this.textBoxFilter);
       this.splitContainer1.Panel1.Controls.Add(this.label8);
       this.splitContainer1.Panel1.Controls.Add(this.label7);
       this.splitContainer1.Panel1.Controls.Add(this.listBoxProperties);
       this.splitContainer1.Panel1.Controls.Add(this.label6);
       this.splitContainer1.Panel1.Controls.Add(this.buttonLoadProperties);
       this.splitContainer1.Panel1.Controls.Add(this.label5);
       this.splitContainer1.Panel1.Controls.Add(this.groupBox1);
       this.splitContainer1.Panel1.Controls.Add(this.textBoxHostname);
       this.splitContainer1.Panel1.Controls.Add(this.label2);
       this.splitContainer1.Panel1.Controls.Add(this.label1);
       // 
       // Panel2
       // 
       this.splitContainer1.Panel2.Controls.Add(this.textBoxResults);
       this.splitContainer1.Size = new System.Drawing.Size(721, 550);
       this.splitContainer1.SplitterDistance = 370;
       this.splitContainer1.TabIndex = 0;
       this.splitContainer1.Text = "splitContainer1";
       // 
       // buttonSearch
       // 
       this.buttonSearch.Location = new System.Drawing.Point(190, 489);
       this.buttonSearch.Name = "buttonSearch";
       this.buttonSearch.TabIndex = 12;
       this.buttonSearch.Text = "Search";
       this.buttonSearch.Click += new System.EventHandler(this.OnSearch);
       // 
       // label9
       // 
       this.label9.AutoSize = true;
       this.label9.Location = new System.Drawing.Point(22, 489);
       this.label9.Name = "label9";
       this.label9.Size = new System.Drawing.Size(98, 14);
       this.label9.TabIndex = 11;
       this.label9.Text = "5. Start the Search";
       // 
       // textBoxFilter
       // 
       this.textBoxFilter.Location = new System.Drawing.Point(190, 445);
       this.textBoxFilter.Name = "textBoxFilter";
       this.textBoxFilter.TabIndex = 10;
       this.textBoxFilter.Text = "(objectClass=user)";
       // 
       // label8
       // 
       this.label8.AutoSize = true;
       this.label8.Location = new System.Drawing.Point(22, 452);
       this.label8.Name = "label8";
       this.label8.Size = new System.Drawing.Size(33, 14);
       this.label8.TabIndex = 9;
       this.label8.Text = "Filter:";
       // 
       // label7
       // 
       this.label7.AutoSize = true;
       this.label7.Location = new System.Drawing.Point(22, 420);
       this.label7.Name = "label7";
       this.label7.Size = new System.Drawing.Size(127, 14);
       this.label7.TabIndex = 8;
       this.label7.Text = "4. Enter the LDAP Filter:";
       // 
       // listBoxProperties
       // 
       this.listBoxProperties.FormattingEnabled = true;
       this.listBoxProperties.Location = new System.Drawing.Point(190, 289);
       this.listBoxProperties.Name = "listBoxProperties";
       this.listBoxProperties.Size = new System.Drawing.Size(120, 95);
       this.listBoxProperties.TabIndex = 7;
       // 
       // label6
       // 
       this.label6.AutoSize = true;
       this.label6.Location = new System.Drawing.Point(22, 289);
       this.label6.Name = "label6";
       this.label6.Size = new System.Drawing.Size(129, 27);
       this.label6.TabIndex = 6;
       this.label6.Text = "3. Choose the Properties \r\nto Display";
       // 
       // buttonLoadProperties
       // 
       this.buttonLoadProperties.Location = new System.Drawing.Point(190, 238);
       this.buttonLoadProperties.Name = "buttonLoadProperties";
       this.buttonLoadProperties.Size = new System.Drawing.Size(116, 23);
       this.buttonLoadProperties.TabIndex = 5;
       this.buttonLoadProperties.Text = "Load Properties";
       this.buttonLoadProperties.Click += new System.EventHandler(this.OnLoadProperties);
       // 
       // label5
       // 
       this.label5.AutoSize = true;
       this.label5.Location = new System.Drawing.Point(29, 238);
       this.label5.Name = "label5";
       this.label5.Size = new System.Drawing.Size(118, 14);
       this.label5.TabIndex = 4;
       this.label5.Text = "2. Load the Properties:";
       // 
       // groupBox1
       // 
       this.groupBox1.Controls.Add(this.textBoxPassword);
       this.groupBox1.Controls.Add(this.textBoxUsername);
       this.groupBox1.Controls.Add(this.label4);
       this.groupBox1.Controls.Add(this.label3);
       this.groupBox1.Location = new System.Drawing.Point(22, 115);
       this.groupBox1.Name = "groupBox1";
       this.groupBox1.Size = new System.Drawing.Size(304, 100);
       this.groupBox1.TabIndex = 3;
       this.groupBox1.TabStop = false;
       this.groupBox1.Text = "Logon [optional]";
       // 
       // textBoxPassword
       // 
       this.textBoxPassword.Location = new System.Drawing.Point(168, 60);
       this.textBoxPassword.Name = "textBoxPassword";
       this.textBoxPassword.PasswordChar = "*";
       this.textBoxPassword.Size = new System.Drawing.Size(116, 20);
       this.textBoxPassword.TabIndex = 3;
       // 
       // textBoxUsername
       // 
       this.textBoxUsername.Location = new System.Drawing.Point(168, 23);
       this.textBoxUsername.Name = "textBoxUsername";
       this.textBoxUsername.Size = new System.Drawing.Size(116, 20);
       this.textBoxUsername.TabIndex = 2;
       // 
       // label4
       // 
       this.label4.AutoSize = true;
       this.label4.Location = new System.Drawing.Point(7, 60);
       this.label4.Name = "label4";
       this.label4.Size = new System.Drawing.Size(57, 14);
       this.label4.TabIndex = 1;
       this.label4.Text = "Password:";
       // 
       // label3
       // 
       this.label3.AutoSize = true;
       this.label3.Location = new System.Drawing.Point(7, 29);
       this.label3.Name = "label3";
       this.label3.Size = new System.Drawing.Size(60, 14);
       this.label3.TabIndex = 0;
       this.label3.Text = "Username:";
       // 
       // textBoxHostname
       // 
       this.textBoxHostname.Location = new System.Drawing.Point(190, 70);
       this.textBoxHostname.Name = "textBoxHostname";
       this.textBoxHostname.Size = new System.Drawing.Size(136, 20);
       this.textBoxHostname.TabIndex = 2;
       // 
       // label2
       // 
       this.label2.AutoSize = true;
       this.label2.Location = new System.Drawing.Point(22, 70);
       this.label2.Name = "label2";
       this.label2.Size = new System.Drawing.Size(145, 14);
       this.label2.TabIndex = 1;
       this.label2.Text = "Domain Controller [optional]";
       // 
       this.label1.AutoSize = true;
       this.label1.Location = new System.Drawing.Point(22, 31);
       this.label1.Name = "label1";
       this.label1.Size = new System.Drawing.Size(254, 14);
       this.label1.TabIndex = 0;
       this.label1.Text = "1. Enter Domain Controller and Logon Information";
       // 
       // textBoxResults
       // 
       this.textBoxResults.Dock = System.Windows.Forms.DockStyle.Fill;
       this.textBoxResults.Location = new System.Drawing.Point(0, 0);
       this.textBoxResults.Multiline = true;
       this.textBoxResults.Name = "textBoxResults";
       this.textBoxResults.Size = new System.Drawing.Size(347, 550);
       this.textBoxResults.TabIndex = 0;
       // 
       // UserSearchForm
       // 
       this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
       this.ClientSize = new System.Drawing.Size(721, 550);
       this.Controls.Add(this.splitContainer1);
       this.Name = "UserSearchForm";
       this.Text = "User Search";
       this.splitContainer1.Panel1.ResumeLayout(false);
       this.splitContainer1.Panel1.PerformLayout();
       this.splitContainer1.Panel2.ResumeLayout(false);
       this.splitContainer1.Panel2.PerformLayout();
       this.splitContainer1.ResumeLayout(false);
       this.groupBox1.ResumeLayout(false);
       this.groupBox1.PerformLayout();
       this.ResumeLayout(false);
   }
   private System.Windows.Forms.SplitContainer splitContainer1;
   private System.Windows.Forms.TextBox textBoxHostname;
   private System.Windows.Forms.Label label2;
   private System.Windows.Forms.Label label1;
   private System.Windows.Forms.GroupBox groupBox1;
   private System.Windows.Forms.TextBox textBoxUsername;
   private System.Windows.Forms.Label label4;
   private System.Windows.Forms.Label label3;
   private System.Windows.Forms.TextBox textBoxPassword;
   private System.Windows.Forms.Button buttonLoadProperties;
   private System.Windows.Forms.Label label5;
   private System.Windows.Forms.Label label6;
   private System.Windows.Forms.ListBox listBoxProperties;
   private System.Windows.Forms.TextBox textBoxFilter;
   private System.Windows.Forms.Label label8;
   private System.Windows.Forms.Label label7;
   private System.Windows.Forms.Button buttonSearch;
   private System.Windows.Forms.Label label9;
   private System.Windows.Forms.TextBox textBoxResults;
   [STAThread]
   static void Main() {
       Application.EnableVisualStyles();
       Application.Run(new UserSearchForm());
   }

}

</source>


DirectoryServices:Modify Property

<source lang="csharp"> using System; using System.DirectoryServices; public class ModifyProperty {

  public static void Main()
  {
     DirectoryEntry de = new DirectoryEntry(
        "LDAP://192.168.1.100/cn=kblum, ou=sales, dc=ispnet1, dc=net",
        "cn=Administrator, dc=ispnet1, dc=net", "password",
         AuthenticationTypes.ServerBind);
     de.Properties["sn"][0] = "Mullen";
     de.rumitChanges();
     Console.WriteLine("New property value: {0}", de.Properties["sn"][0]);
     de.Close();
  }

}


      </source>


DirectoryServices: Simple Search

<source lang="csharp"> using System; using System.DirectoryServices; public class SimpleSearch {

  public static void Main()
  {
     DirectoryEntry root = new DirectoryEntry(
       "LDAP://192.168.1.100/DC=ispnet1,DC=net",
       "cn=Administrator, dc=ispnet1, dc=net", "password",
       AuthenticationTypes.ServerBind);
     DirectorySearcher searcher = new DirectorySearcher(root);
     searcher.Filter = "(&(objectClass=person)(sn=Blum))";
     searcher.PropertiesToLoad.Add("cn");
     searcher.PropertiesToLoad.Add("telephoneNumber");
     SearchResultCollection results = searcher.FindAll();
     foreach(SearchResult result in results)
     {
        string searchpath = result.Path;
        Console.WriteLine("path: {0}", searchpath);
        ResultPropertyCollection rpc = result.Properties;
        foreach(string property in rpc.PropertyNames)
        {
           foreach(object value in rpc[property])
              Console.WriteLine("  property = {0}  value = {1}", property, value);
        }
     } 
  }

}

      </source>


retrieves Active Directory information

<source lang="csharp"> using System; using System.DirectoryServices; public class Example21_16 {

 public static void Main() 
 {
   // connect to AD
   DirectoryEntry de = new DirectoryEntry(
     "WinNT://DomanName/MachineName", "Administrator", "Password");
   foreach(DirectoryEntry child in de.Children) 
   {
     Console.WriteLine(child.SchemaClassName + ": " + child.Name);
   }
 }

}


      </source>


Using DirectorySearcher

<source lang="csharp"> using System; using System.Net; using System.DirectoryServices;

public class MainClass {

   public static void Main() {
       using (DirectoryEntry de = new DirectoryEntry("LDAP://yourV/OU=yourV, DC=explorer, DC=local"))
       using (DirectorySearcher searcher = new DirectorySearcher()) {
           de.Username = @"explorer\yourName";
           de.Password = "password";
           searcher.SearchRoot = de;
           searcher.Filter = "(&(objectClass=user)(description=Auth*))";
           searcher.SearchScope = System.DirectoryServices.SearchScope.Subtree;
           searcher.PropertiesToLoad.Add("name");
           searcher.PropertiesToLoad.Add("description");
           searcher.PropertiesToLoad.Add("givenName");
           searcher.PropertiesToLoad.Add("wWWHomePage");
           searcher.Sort = new SortOption("givenName", SortDirection.Ascending);
           SearchResultCollection results = searcher.FindAll();
           foreach (SearchResult result in results) {
               ResultPropertyCollection props = result.Properties;
               foreach (string propName in props.PropertyNames) {
                   Console.Write(propName + ": ");
                   Console.WriteLine(props[propName][0]);
               }
           }
       }
   }

}

</source>