Csharp/C Sharp/Web Services/Active Directory
Содержание
- 1 DirectoryEntry and DirectoryEntries
- 2 DirectoryEntry Get Properties
- 3 DirectoryEntry : List Objects
- 4 DirectoryEntry Rename Object
- 5 DirectoryServices: Add Object
- 6 DirectoryServices: Add Property
- 7 DirectoryServices Bind Object
- 8 DirectoryServices: Delete Object
- 9 DirectoryServices DirectoryEntry
- 10 DirectoryServices GUI
- 11 DirectoryServices:Modify Property
- 12 DirectoryServices: Simple Search
- 13 retrieves Active Directory information
- 14 Using DirectorySearcher
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>