Csharp/C Sharp/Web Services/Active Directory — различия между версиями

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

Версия 15:31, 26 мая 2010

DirectoryEntry and DirectoryEntries

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");
      }
   }
}


DirectoryEntry Get Properties

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);
      }
   }
}


DirectoryEntry : List Objects

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);
      }
   }
}


DirectoryEntry Rename Object

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();
   }
}


DirectoryServices: Add Object

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();
   }
}


DirectoryServices: Add Property

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();
   }
}


DirectoryServices Bind Object

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();
   }
}


DirectoryServices: Delete Object

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());
      }
   }
}


DirectoryServices DirectoryEntry

 
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);
                }
            }
        }
    }
}


DirectoryServices GUI

 
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());
    }
}


DirectoryServices:Modify Property

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();
   }
}


DirectoryServices: Simple Search

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);
         }
      } 
   }
}


retrieves Active Directory information

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);
    }
  }
}


Using DirectorySearcher

 
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]);
                }
            }
        }
    }
}