C#利用WMI操作DNS服务器(可远程操作,需要相应权限)

来源:互联网 发布:电脑打字软件哪个好 编辑:程序博客网 时间:2024/04/30 18:50
    using System; using System.Collections.Generic; using System.Text; using System.Data; namespace Yaosansi {     class Test     {         static void Main()         {             MyDnsTEST();         }     /// <summary>     /// MyDnsTEST功能测试   /// C#利用WMI操作DNS服务器(可远程操作,需要相应权限)     /// Author:yaosansi      /// Create Date:2005-09-07     /// Modify Date:2006-10-25     /// Site:http://www.yaosansi.com/     /// E-mail:yaosansi at 126 dot com     /// http://www.yaosansi.com/blog/article.asp?id=935     /// http://yaosansi.cnblogs.com/archive/2006/11/04/DNSServiceInCsharpWithWMI.html     /// 注意:此版本为WINDOWS2003 DNS服务器专用.不适合其它版本操作系统.     /// </summary>         static void MyDnsTEST()         {             Yaosansi.Net.MYDNS dns = new Yaosansi.Net.MYDNS();             //===========================================             //不对以下三个属性赋值默认DNS服务器为本机.             dns.ServerName = "202.96.64.68";             dns.userName = "Administrator";             dns.passWord = "123456789";             //===========================================             //dns.CreateZone("yaosansi.com");             //dns.DelZone("yaosansi.com");             //dns.CreateAType("yaosansi.com", "www", "2.2.2.2", "3600");             //dns.ModifyAType("yaosansi.com","www","127.21.0.1","800");             //dns.DelAType("yaosansi.com", "mail");             //dns.CreateMXType("mail", "yaosansi.com", "5.5.5.5", "20", "3600");             //dns.ModifyMXType("mail", "yaosansi.com", "36000", "218.1.1.1", "26");             //dns.DelMXType("mail", "yaosansi.com");             //dns.CreateCNAMEType("mpq2", "yaosansi.com", "www.yaosansi.com", "3900");             //dns.ModifyCNAMEType("mpq2", "abc.com", "30520", "www.yaosansi.com.");             //dns.DelCNAMEType("mpq", "yaosansi.com");             //DataTable table = dns.ListExistsMXType("yaosansi.com");             DataTable table = dns.ListExistsAType("yaosansi.com");             //DataTable table = dns.ListExistsCNAMEType("yaosansi.com");             Yaosansi.Data.DataHelp.PrintTable(table);             if (!string.IsNullOrEmpty(dns.ErrMessage))             {                 Console.WriteLine("--------------------------------------------------");                 Console.WriteLine("返回信息:" + dns.ErrMessage);                 Console.WriteLine("--------------------------------------------------");             }             Console.WriteLine("");             Console.WriteLine("===End===");             Console.ReadLine();         }     } } using System; using System.Management; using System.Data; namespace Yaosansi.Net {     /// <summary>     /// C#利用WMI操作DNS服务器(可远程操作,需要相应权限)     /// Author:yaosansi      /// Create Date:2005-09-07     /// Modify Date:2006-10-25     /// Site:http://www.yaosansi.com/     /// E-mail:yaosansi at 126 dot com     /// http://www.yaosansi.com/blog/article.asp?id=935     /// http://yaosansi.cnblogs.com/archive/2006/11/04/DNSServiceInCsharpWithWMI.html     /// 注意:此版本为WINDOWS2003 DNS服务器专用.不适合其它版本操作系统.     /// </summary>     public class MYDNS     {         //要连接的DNS服务器         private string sServerPath;         //用户名         private string username = null;         //密码         private string password = null;         //服务器名称或IP地址         private string DNSName = null;         //表示管理操作的范围.这里是用来执行DNS的命名空间         private ManagementScope DNS;         //用于返回检索的ManagementObject集合         private System.Management.ManagementObjectCollection Q;         //         private ManagementClass DnsClass;         //         private ManagementBaseObject MI;         /// <summary>         /// 返回的操作信息.         /// </summary>         private string errMessage=null;         /// <summary>         /// 获取错误信息.         /// </summary>         public string ErrMessage         {             get             {                 return errMessage;             }         }         /// <summary>         /// 设置DNS服务器名称或IP地址         /// </summary>         public string ServerName         {             set             {                 this.sServerPath = string.Format(@"//{0}/root/MicrosoftDNS", value);                 this.DNSName = value;             }         }         /// <summary>         /// 设置连接服务器的用户名(指定服务器IP,用户和密码后将自动连接远程服务器,本机不需要指定)         /// </summary>         public string userName         {             set             {                 this.username = value;             }         }         /// <summary>         /// 设置连接服务器的密码(指定服务器IP,用户和密码后将自动连接远程服务器,本机不需要指定)         /// </summary>         public string passWord         {             set             {                 this.password = value;             }         }         /// <summary>         /// 构造函数         /// </summary>         public MYDNS()         {             sServerPath = @"//localhost/root/MicrosoftDNS";             DNSName = "localhost";         }         /// <summary>         /// 建立对象.连接         /// </summary>         /// <param name="DnsType">DNS类型 MicrosoftDNS_Zone等</param>         private void Create(string DnsType)         {             if (!string.IsNullOrEmpty(username) && !string.IsNullOrEmpty(password))             {                 System.Management.ConnectionOptions Conn = new ConnectionOptions();                 Conn.Username = username; //用户名                 Conn.Password = password; //口令                 DNS = new ManagementScope(sServerPath,Conn);             }             else             {                 DNS = new ManagementScope(sServerPath);             }             if (!DNS.IsConnected)             {                 DNS.Connect();             }             ManagementPath Path = new ManagementPath(DnsType);             this.DnsClass = new ManagementClass(DNS, Path, null);         }         /// <summary>         /// 查询DNS并建立对象         /// </summary>         /// <param name="query">WQL查询语句</param>         ///  <param name="DnsType">DNS类型 MicrosoftDNS_Zone等</param>         /// <returns></returns>         public ManagementObjectCollection QueryDNS(string query, string DnsType)         {             this.Create(DnsType);             System.Management.ManagementObjectSearcher QS = new ManagementObjectSearcher(DNS, new ObjectQuery(query));             QS.Scope = DNS;             return QS.Get();         }         /// <summary>         /// 仅查询DNS         /// </summary>         /// <param name="query">WQL查询语句</param>         /// <returns></returns>         public ManagementObjectCollection QueryDNS(string query)         {             if (!string.IsNullOrEmpty(username) && !string.IsNullOrEmpty(password))             {                 System.Management.ConnectionOptions Conn = new ConnectionOptions();                 Conn.Username = username; //用户名                 Conn.Password = password; //口令                 DNS = new ManagementScope(sServerPath, Conn);             }             else             {                 DNS = new ManagementScope(sServerPath);             }             if (!DNS.IsConnected)             {                 DNS.Connect();             }             System.Management.ManagementObjectSearcher QS = new ManagementObjectSearcher(DNS, new ObjectQuery(query));             QS.Scope = DNS;             return QS.Get();         }         /// <summary>         /// 判断区域是否存在         /// </summary>         /// <param name="domain">区域名称</param>         /// <returns></returns>         public bool IsExistsZone(string domain)         {             try             {                 Q = QueryDNS("Select * From MicrosoftDNS_ZONE where ContainerName='" + domain + "'");                 foreach (ManagementObject oManObject in Q)                 {                     //Console.WriteLine(oManObject["ContainerName"].ToString());                     return true;                 }                 return false;             }             catch (Exception e)             {                 errMessage = e.Message;                 Console.WriteLine(e.ToString());                 return false;             }         }         /// <summary>         /// 创建一个新的区域,仅区域名称         /// </summary>         /// <param name="domain">区域的名称</param>         public bool CreateZone(string domain)         {             try             {                 this.Create("MicrosoftDNS_Zone");                 //如果区域已经存在                 if (IsExistsZone(domain))                 {                     errMessage = "域:"+domain+"已经存在.";                     return false;                 }                 //建立新的区域                 this.MI = DnsClass.GetMethodParameters("CreateZone");                 this.MI["ZoneName"] = domain;                 this.MI["ZoneType"] = 0;                 ManagementBaseObject OutParams = this.DnsClass.InvokeMethod("CreateZone", MI, null);                 errMessage = "域:"+domain+"创建成功.";                 return true;             }             catch (Exception e)             {                 errMessage = e.Message;                 Console.WriteLine(e.ToString());                 return false;             }         }         /// <summary>         /// 创建一个区域,包括其它参数         /// </summary>         /// <param name="domain">要创建的区域名称</param>         /// <param name="ZoneType">Type of zone. Valid values are the following:0 Primary zone. 1 Secondary zone.  2 Stub zone. 3 Zone forwarder. </param>         /// <param name="DataFileName">[in, optional] Name of the data file associated with the zone</param>         /// <param name="IpAddr">[in, optional] IP address of the mater DNS Server for the zone. </param>         /// <param name="AdminEmailName">[in, optional] Email address of the administrator responsible for the zone</param>         /// <returns></returns>         public bool CreateZone(string domain, uint ZoneType, string DataFileName, string[] IpAddr, string AdminEmailName)         {             try             {                 this.Create("MicrosoftDNS_Zone");                 //如果区域已经存在                 if (IsExistsZone(domain))                 {                     errMessage = "域:" + domain + "已经存在.";                     return false;                 }                 //建立新的区域                 MI = DnsClass.GetMethodParameters("CreateZone");                 MI["ZoneName"] = domain;                 MI["ZoneType"] = ZoneType;                 MI["DataFileName"] = DataFileName;                 MI["IpAddr"] = IpAddr;                 MI["AdminEmailName"] = AdminEmailName;                 ManagementBaseObject OutParams = this.DnsClass.InvokeMethod("CreateZone", MI, null);                 errMessage = "域:" + domain + "创建成功.";                 return true;             }             catch (Exception e)             {                 errMessage = e.Message;                 Console.WriteLine(e.ToString());                 return false;             }         }         /// <summary>         /// 修改区域         /// </summary>         /// <param name="domain">要修改的区域名称</param>         /// <param name="ZoneType">Type of zone. Valid values are the following:0 Primary zone. 1 Secondary zone.  2 Stub zone. 3 Zone forwarder. </param>         /// <param name="DataFileName">[in, optional] Name of the data file associated with the zone</param>         /// <param name="IpAddr">[in, optional] IP address of the mater DNS Server for the zone. </param>         /// <param name="AdminEmailName">[in, optional] Email address of the administrator responsible for the zone</param>         /// <returns></returns>         public bool ChangeZoneType(string domain, uint ZoneType, string DataFileName, string[] IpAddr, string AdminEmailName)         {             try             {                 Q = QueryDNS("Select * From MicrosoftDNS_ZONE where ContainerName='" + domain + "'", "MicrosoftDNS_Zone");                 foreach (ManagementObject oManObject in Q)                 {                     MI = oManObject.GetMethodParameters("ChangeZoneType");                     MI["ZoneType"] = ZoneType;                     MI["DataFileName"] = DataFileName;                     MI["IpAddr"] = IpAddr;                     MI["AdminEmailName"] = AdminEmailName;                     oManObject.InvokeMethod("ChangeZoneType", MI, null);                     errMessage = "域:" + domain + "修改成功.";                     return true;                 }                 errMessage = "未找到域:"+domain;                 return false;             }             catch (Exception e)             {                 errMessage = e.Message;                 Console.WriteLine(e.ToString());                 return false;             }         }         /// <summary>         /// 删除区域         /// </summary>         /// <param name="domain">要册除的区域的名称</param>         /// <returns></returns>         public bool DelZone(string domain)         {             try             {                 Q = QueryDNS("Select * From MicrosoftDNS_ZONE where ContainerName='" + domain + "'", "MicrosoftDNS_Zone");                 foreach (ManagementObject oManObject in Q)                 {                     oManObject.Delete();                     errMessage = "域:" + domain + "删除成功.";                     return true;                 }                 errMessage = "未找到域:" + domain;                 return false;             }             catch (Exception e)             {                 errMessage = e.Message;                 Console.WriteLine(e.ToString());                 return false;             }         }         /// <summary>         /// 判断在某MicrosoftDNS_AType是否在指定的域中存在         /// </summary>         /// <param name="domain"></param>         /// <param name="OwnerName"></param>         /// <returns></returns>         public bool IsExistsAType(string domain, string OwnerName)         {             try             {                 Q = QueryDNS("Select * From MicrosoftDNS_AType where OwnerName='" + OwnerName + "' and ContainerName='" + domain + "'");                 foreach (ManagementObject oManObject in Q)                 {                     //Console.WriteLine(oManObject["OwnerName"].ToString());                     return true;                 }                 return false;             }             catch (Exception e)             {                 errMessage = e.Message;                 Console.WriteLine(e.ToString());                 return false;             }         }         /// <summary>         /// 创建MicrosoftDNS_AType          /// </summary>         /// <param name="ContainerName">Name of the Container for the Zone, Cache, or RootHints instance which contains this RR</param>         /// <param name="HostName">主机名 [如果为空或NULL,主机名将与域名保持一致.]</param>         /// <param name="TTL">Time, in seconds, that the RR can be cached by a DNS resolver</param>         /// <param name="IPAddress">String representing the IPv4 address of the host</param>         /// <returns></returns>         public bool CreateAType(string ContainerName, string HostName, string IPAddress,string TTL)         {             try             {                 string OwnerName = null;                 if (string.IsNullOrEmpty(HostName))                 {                     OwnerName = ContainerName;                 }                 else                 {                     OwnerName = HostName + "." + ContainerName;                 }                 this.Create("MicrosoftDNS_AType");                 //如果区域不存在                 if (!IsExistsZone(ContainerName))                 {                     Console.WriteLine("区域:{0}不存在,创建失败", ContainerName);                     errMessage = string.Format("区域:{0}不存在,创建失败", ContainerName);                     return false;                 }                 if (IsExistsAType(ContainerName, OwnerName))                 {                     Console.WriteLine("{0}中已存在{1},创建失败", ContainerName, OwnerName);                     errMessage = string.Format("{0}中已存在{1},创建失败", ContainerName, OwnerName);                     return false;                 }                 MI = DnsClass.GetMethodParameters("CreateInstanceFromPropertyData");                 MI["DnsServerName"] = "localhost";                 MI["ContainerName"] = ContainerName;                 MI["OwnerName"] = OwnerName;                 MI["IPAddress"] = IPAddress;                 if (string.IsNullOrEmpty(TTL))                 {                     TTL = "3600";                 }                 MI["TTL"] =TTL;                 DnsClass.InvokeMethod("CreateInstanceFromPropertyData", MI, null);                 errMessage = "A记录:" + OwnerName + "创建成功.";                 return true;             }             catch (Exception e)             {                 errMessage = e.Message;                 Console.WriteLine(e.ToString());                 return false;             }         }         /// <summary>         /// 创建MicrosoftDNS_AType          /// </summary>         /// <param name="DnsServerName">FQDN or IP address of the DNS Server that contains this RR</param>         /// <param name="ContainerName">Name of the Container for the Zone, Cache, or RootHints instance which contains this RR</param>         /// <param name="HostName">主机名 [如果为空或NULL,主机名将与域名保持一致.]</param>         /// <param name="RecordClass">Class of the RR. Default value is 1. The following values are valid.1 IN (Internet) 2 CS (CSNET)  3 CH (CHAOS) 4 HS (Hesiod) </param>         /// <param name="TTL">Time, in seconds, that the RR can be cached by a DNS resolver</param>         /// <param name="IPAddress">String representing the IPv4 address of the host</param>         /// <returns></returns>         public bool CreateAType(string DnsServerName, string ContainerName, string HostName, uint RecordClass, uint TTL, string IPAddress)         {             try             {                 string OwnerName = null;                 if (string.IsNullOrEmpty(HostName))                 {                     OwnerName = ContainerName;                 }                 else                 {                     OwnerName = HostName + "." + ContainerName;                 }                 this.Create("MicrosoftDNS_AType");                 //如果区域不存在                 if (!IsExistsZone(ContainerName))                 {                     Console.WriteLine("区域:{0}不存在,创建失败", ContainerName);                     errMessage = string.Format("区域:{0}不存在,创建失败", ContainerName);                     return false;                 }                 if (IsExistsAType(ContainerName, OwnerName))                 {                     Console.WriteLine("{0}中已存在{1},创建失败", ContainerName, OwnerName);                     errMessage=string.Format("{0}中已存在{1},创建失败", ContainerName, OwnerName);                     return false;                 }                 MI = DnsClass.GetMethodParameters("CreateInstanceFromPropertyData");                 MI["DnsServerName"] = DnsServerName;                 MI["ContainerName"] = ContainerName;                 MI["OwnerName"] = OwnerName;                 MI["RecordClass"] = RecordClass;                 MI["TTL"] = TTL;                 MI["IPAddress"] = IPAddress;                 DnsClass.InvokeMethod("CreateInstanceFromPropertyData", MI, null);                 errMessage = "A记录:" + OwnerName + "创建成功.";                 return true;             }             catch (Exception e)             {                 errMessage = e.Message;                 Console.WriteLine(e.ToString());                 return false;             }         }         /// <summary>         /// 修改MicrosoftDNS_AType          /// </summary>         /// <param name="ContainerName">Name of the Container for the Zone, Cache, or RootHints instance which contains this RR</param>         /// <param name="HostName">主机名 [如果为空或NULL,主机名将与域名保持一致.]</param>         /// <param name="TTL">Time, in seconds, that the RR can be cached by a DNS resolver</param>         /// <param name="IPAddress"></param>         /// <returns></returns>         public bool ModifyAType(string ContainerName, string HostName, string IPAddress,string TTL)         {             try             {                 string OwnerName = null;                 if (string.IsNullOrEmpty(HostName))                 {                     OwnerName = ContainerName;                 }                 else                 {                     OwnerName = HostName + "." + ContainerName;                 }                 //如果区域不存在                 if (!IsExistsZone(ContainerName))                 {                     Console.WriteLine("区域:{0}不存在,修改失败", ContainerName);                     errMessage = string.Format("区域:{0}不存在,修改失败", ContainerName);                     return false;                 }                 if (!IsExistsAType(ContainerName, OwnerName))                 {                     Console.WriteLine("{0}中不存在{1},修改失败", ContainerName, OwnerName);                     errMessage = string.Format("{0}中不存在{1},修改失败", ContainerName, OwnerName);                     return false;                 }                 Q = QueryDNS("Select * From MicrosoftDNS_AType where ContainerName='" + ContainerName + "' and OwnerName='" + OwnerName + "'", "MicrosoftDNS_AType");                 foreach (ManagementObject oManObject in Q)                 {                     //foreach (PropertyData p in oManObject.Properties)                     //{                     //    try                     //    { Console.WriteLine(p.Name+"="+oManObject[p.Name]); }                     //    catch                     //    { }                     //}                     if (oManObject["IPAddress"].ToString() == IPAddress)                     {                         errMessage = "A记录:" + OwnerName + "修改失败,必须修改IP地址.";                         return false;                     }                     MI = oManObject.GetMethodParameters("Modify");                     MI["IPAddress"] = IPAddress;                     MI["TTL"] = TTL;                     oManObject.InvokeMethod("Modify", MI, null);                     errMessage = "A记录:" + OwnerName + "修改成功.";                     return true;                 }                 errMessage = string.Format("{0}中不存在{1},修改失败", ContainerName, OwnerName);                 return false;             }             catch (Exception e)             {                 errMessage = e.Message;                 Console.WriteLine(e.ToString());                 return false;             }         }         /// <summary>         /// 删除MicrosoftDNS_AType         /// </summary>         /// <param name="ContainerName">Name of the Container for the Zone, Cache, or RootHints instance which contains this RR</param>         /// <param name="HostName">主机名 [如果为空或NULL,主机名将与域名保持一致.]</param>         /// <returns></returns>         public bool DelAType(string ContainerName, string HostName)         {             try             {                 string OwnerName = null;                 if (string.IsNullOrEmpty(HostName))                 {                     OwnerName = ContainerName;                 }                 else                 {                     OwnerName = HostName + "." + ContainerName;                 }                 //如果区域不存在                 if (!IsExistsZone(ContainerName))                 {                     Console.WriteLine("区域:{0}不存在,删除失败", ContainerName);                     errMessage = string.Format("区域:{0}不存在,删除失败", ContainerName);                     return false;                 }                 if (!IsExistsAType(ContainerName, OwnerName))                 {                     Console.WriteLine("{0}中不存在{1},删除失败", ContainerName, OwnerName);                     errMessage = string.Format("{0}中不存在{1},删除失败", ContainerName, OwnerName);                     return false;                 }                 Q = QueryDNS("Select * From MicrosoftDNS_AType where ContainerName='" + ContainerName + "' and OwnerName='" + OwnerName + "'", "MicrosoftDNS_AType");                 foreach (ManagementObject oManObject in Q)                 {                     oManObject.Delete();                     errMessage = "A记录:" + OwnerName + "删除成功.";                     return true;                 }                 errMessage = string.Format("{0}中不存在{1},删除失败", ContainerName, OwnerName);                 return false;             }             catch (Exception e)             {                 errMessage = e.Message;                 Console.WriteLine(e.ToString());                 return false;             }         }         /// <summary>         /// 列出某域名下的所有A记录.         /// </summary>         /// <param name="ContainerName">Name of the Container for the Zone, Cache, or RootHints instance which contains this RR</param>         /// <returns></returns>         public DataTable ListExistsAType(string ContainerName)         {             Yaosansi.IO.Log log = new Yaosansi.IO.Log();             log.WirteLogTime();             log.WirteLog(ContainerName);             DataTable table = new DataTable("MicrosoftDNS_AType" + ContainerName);             table.Columns.Add("主机名 (A)");             table.Columns.Add("IP 地址");             table.Columns.Add("TTL");             try             {                 Q = QueryDNS("Select * From MicrosoftDNS_AType where ContainerName='" + ContainerName + "'");                 foreach (ManagementObject oManObject in Q)                 {                     try                     {                         DataRow row = table.NewRow();                         row["主机名 (A)"] = oManObject["OwnerName"];                         row["IP 地址"] = oManObject["IPAddress"];                         row["TTL"] = oManObject["TTL"];                         table.Rows.Add(row);                     }                     catch (Exception e) { log.WirteLog(e.ToString()); }                 }             }             catch (Exception e)             {                 errMessage = e.Message;                 Console.WriteLine(e.ToString());                 log.WirteLog(e.ToString());             }             Yaosansi.Data.DataHelp.PrintTableLog(table);             return table;         }         /// <summary>         /// 列出某域名下的所有MX记录.         /// </summary>         /// <param name="ContainerName">Name of the Container for the Zone, Cache, or RootHints instance which contains this RR</param>         /// <returns></returns>         public DataTable ListExistsMXType(string ContainerName)         {             DataTable table = new DataTable("MicrosoftDNS_MXType" + ContainerName);             table.Columns.Add("邮件交换记录 (MX)");             table.Columns.Add("目标主机");             table.Columns.Add("优先级");             table.Columns.Add("TTL");             try             {                 Q = QueryDNS("Select * From MicrosoftDNS_MXType where ContainerName='" + ContainerName + "'");                 foreach (ManagementObject oManObject in Q)                 {                     try                     {                         DataRow row = table.NewRow();                         row["目标主机"] = oManObject["MailExchange"];                         row["邮件交换记录 (MX)"] = oManObject["OwnerName"];                         row["优先级"] = oManObject["Preference"];                         row["TTL"] = oManObject["TTL"];                         table.Rows.Add(row);                     }                     catch { }                 }             }             catch (Exception e)             {                 errMessage = e.Message;                 Console.WriteLine(e.ToString());             }             return table;         }         /// <summary>         /// 列出某域名下的所有别名.         /// </summary>         /// <param name="ContainerName">Name of the Container for the Zone, Cache, or RootHints instance which contains this RR</param>         /// <returns></returns>         public DataTable ListExistsCNAMEType(string ContainerName)         {             DataTable table = new DataTable("MicrosoftDNS_CNAMEType" + ContainerName);             table.Columns.Add("别名 (CNAME)");             table.Columns.Add("别名主机");             table.Columns.Add("TTL");             try             {                 Q = QueryDNS("Select * From MicrosoftDNS_CNAMEType where ContainerName='" + ContainerName + "'");                 foreach (ManagementObject oManObject in Q)                 {                     try                     {                         DataRow row = table.NewRow();                         row["别名 (CNAME)"] = oManObject["OwnerName"];                         row["别名主机"] = oManObject["PrimaryName"];                         row["TTL"] = oManObject["TTL"];                         table.Rows.Add(row);                     }                     catch { }                 }             }             catch (Exception e)             {                 errMessage = e.Message;                 Console.WriteLine(e.ToString());             }             return table;         }         /// <summary>         /// 判断在某MicrosoftDNS_MXType是否在指定的域中存在         /// </summary>         /// <param name="ContainerName">主域名 主域 Name of the Container for the Zone, Cache, or RootHints instance that contains this RR.</param>         /// <param name="OwnerName">Owner name for the RR. </param>         /// <returns></returns>         public bool IsExistsMXType(string ContainerName, string OwnerName)         {                        try             {                 Q = QueryDNS("Select * From MicrosoftDNS_MXType Where ContainerName='" + ContainerName + "' and OwnerName='" + OwnerName + "'");                 foreach (ManagementObject oManObject in Q)                 {                   //  Console.WriteLine(oManObject["MailExchange"].ToString());                     return true;                 }                 return false;             }             catch (Exception e)             {                 errMessage = e.Message;                 Console.WriteLine(e.ToString());                 return false;             }         }         /// <summary>         /// 创建MicrosoftDNS_MXType记录(邮件交换记录)         /// </summary>         /// <param name="HostName">主机名 [如果为空或NULL,主机名将与域名保持一致.]</param>         /// <param name="ContainerName">主域 Name of the Container for the Zone, Cache, or RootHints instance that contains this RR.</param>         /// <param name="MailExchange">目标主机 FQDN specifying a host willing to act as a mail exchange for the owner name</param>         /// <param name="Preference">优先级 Preference given to this RR among others at the same owner. Lower values are preferred</param>         /// <param name="TTL">Time, in seconds, that the RR can be cached by a DNS resolver</param>         /// <returns></returns>         public bool CreateMXType(string HostName, string ContainerName,string MailExchange, string Preference, string TTL)         {             try             {                 string OwnerName = null;                 if (string.IsNullOrEmpty(HostName))                 {                     OwnerName = ContainerName;                 }                 else                 {                     OwnerName = HostName + "." + ContainerName;                 }                 this.Create("MicrosoftDNS_MXType");                 //如果区域不存在                 if (!IsExistsZone(ContainerName))                 {                     Console.WriteLine("区域:{0}不存在,创建失败", ContainerName);                     errMessage = string.Format("区域:{0}不存在,创建失败", ContainerName);                     return false;                 }                 if (IsExistsMXType(ContainerName,OwnerName))                 {                     Console.WriteLine("{0}中已存在{1},创建失败", ContainerName,OwnerName );                     errMessage = string.Format("{0}中已存在{1},创建失败", ContainerName, OwnerName);                     return false;                 }                 MI = DnsClass.GetMethodParameters("CreateInstanceFromPropertyData");                 MI["DnsServerName"] = "localhost";                 MI["ContainerName"] = ContainerName;                 // MI["RecordClass"] = 1;  //Default value is 1.  //1 IN (Internet)  //2 CS (CSNET)   //3 CH (CHAOS)   //4 HS (Hesiod)                  MI["MailExchange"] = MailExchange;                 MI["OwnerName"] = OwnerName;                 MI["Preference"] = Preference;                 if (string.IsNullOrEmpty(TTL))                 {                     TTL = "3600";                 }                 MI["TTL"] = TTL;                 DnsClass.InvokeMethod("CreateInstanceFromPropertyData", MI, null);                 errMessage = "MX记录:" + OwnerName + "创建成功.";                 return true;             }             catch (Exception e)             {                 errMessage = e.Message;                 Console.WriteLine(e.ToString());                 return false;             }         }         /// <summary>         /// 修改MicrosoftDNS_MXType记录(修改邮件交换记录)         /// </summary>         /// <param name="HostName">主机名 [如果为空或NULL,主机名将与域名保持一致.]</param>         /// <param name="ContainerName">主域名 主域 Name of the Container for the Zone, Cache, or RootHints instance that contains this RR.</param>         /// <param name="TTL">[in, optional] Time, in seconds, that the RR can be cached by a DNS resolver. </param>         /// <param name="MailExchange">[in, optional] FQDN specifying a host willing to act as a mail exchange for the owner name. </param>         /// <param name="Preference">邮件优先级 [in, optional] Preference given to this RR among others at the same owner. Lower values are preferred. </param>         /// <returns></returns>         public bool ModifyMXType(string HostName, string ContainerName, string TTL, string MailExchange,string Preference)         {             try             {                 string OwnerName = null;                 if (string.IsNullOrEmpty(HostName))                 {                     OwnerName = ContainerName;                 }                 else                 {                     OwnerName = HostName + "." + ContainerName;                 }                 this.Create("MicrosoftDNS_MXType");                 //如果区域不存在                 if (!IsExistsZone(ContainerName))                 {                     Console.WriteLine("区域:{0}不存在,修改失败", ContainerName);                     errMessage = string.Format("区域:{0}不存在,修改失败", ContainerName);                     return false;                 }                 if (!IsExistsMXType(ContainerName, OwnerName))                 {                     Console.WriteLine("{0}中不存在{1},修改失败", ContainerName, OwnerName);                     errMessage = string.Format("{0}中不存在{1},修改失败", ContainerName, OwnerName);                     return false;                 }                 Q = QueryDNS("Select * From MicrosoftDNS_MXType Where ContainerName='" + ContainerName + "' and OwnerName='" + OwnerName + "'");                  foreach (ManagementObject oManObject in Q)                 {                     MI = oManObject.GetMethodParameters("Modify");                     if (string.IsNullOrEmpty(TTL))                     {                         TTL = "3600";                     }                     if (ClearEndDot(oManObject["MailExchange"].ToString()) == ClearEndDot(MailExchange) && oManObject["Preference"].ToString() == Preference)                     {                         errMessage = "MX记录:" + OwnerName + "修改失败,必须修改目标主机或邮件优先级.";                         return false;                     }                     MI["TTL"] = TTL;                     MI["MailExchange"] = MailExchange;                     MI["Preference"] = Preference;                     oManObject.InvokeMethod("Modify", MI, null);                     errMessage = "MX记录:" + OwnerName + "修改成功.";                     return true;                 }                 return false;             }             catch (Exception e)             {                 errMessage = e.Message;                 Console.WriteLine(e.ToString());                 return false;             }         }         /// <summary>         /// 删除MicrosoftDNS_MXType         /// </summary>         /// <param name="HostName">主机名 [如果为空或NULL,主机名将与域名保持一致.]</param>         /// <param name="ContainerName">主域名 主域 Name of the Container for the Zone, Cache, or RootHints instance that contains this RR.</param>         /// <returns></returns>         public bool DelMXType(string HostName, string ContainerName)         {             try             {                  string OwnerName = null;                 if (string.IsNullOrEmpty(HostName))                 {                     OwnerName = ContainerName;                 }                 else                 {                     OwnerName = HostName + "." + ContainerName;                 }                 this.Create("MicrosoftDNS_MXType");                 //如果区域不存在                 if (!IsExistsZone(ContainerName))                 {                     Console.WriteLine("区域:{0}不存在,删除失败", ContainerName);                     errMessage = string.Format("区域:{0}不存在,删除失败", ContainerName);                     return false;                 }                 if (!IsExistsMXType(ContainerName, OwnerName))                 {                     Console.WriteLine("{0}中不存在{1},删除失败", ContainerName, OwnerName);                     errMessage = string.Format("{0}中不存在{1},删除失败", ContainerName, OwnerName);                     return false;                 }                 Q = QueryDNS("Select * From MicrosoftDNS_MXType Where ContainerName='" + ContainerName + "' and OwnerName='" + OwnerName + "'");                 foreach (ManagementObject oManObject in Q)                 {                     oManObject.Delete();                     errMessage = "MX记录:" + OwnerName + "删除成功.";                     return true;                 }                 return false;             }             catch (Exception e)             {                 errMessage = e.Message;                 Console.WriteLine(e.ToString());                 return false;             }         }         /// <summary>         /// 判断在某MicrosoftDNS_CNAMEType是否在指定的域中存在         /// </summary>         /// <param name="ContainerName">主域名 主域 Name of the Container for the Zone, Cache, or RootHints instance that contains this RR.</param>         /// <param name="OwnerName">Owner name for the RR. </param>         /// <returns></returns>         public bool IsExistsCNAMEType(string ContainerName, string OwnerName)         {             try             {                 Q = QueryDNS("Select * From MicrosoftDNS_CNAMEType Where ContainerName='" + ContainerName + "' and OwnerName='" + OwnerName + "'");                 foreach (ManagementObject oManObject in Q)                 {                     //  Console.WriteLine(oManObject["MailExchange"].ToString());                     return true;                 }                 return false;             }             catch (Exception e)             {                 errMessage = e.Message;                 Console.WriteLine(e.ToString());                 return false;             }         }         /// <summary>         /// 创建MicrosoftDNS_CNAMEType记录(别名)         /// </summary>         /// <param name="HostName">主机名 [如果为空或NULL,主机名将与域名保持一致.]</param>         /// <param name="ContainerName">主域 Name of the Container for the Zone, Cache, or RootHints instance that contains this RR.</param>         /// <param name="PrimaryName">in] Primary name of the CNAME RR</param>         /// <param name="TTL">Time, in seconds, that the RR can be cached by a DNS resolver</param>         /// <returns></returns>         public bool CreateCNAMEType(string HostName, string ContainerName, string PrimaryName,  string TTL)         {             try             {                 string OwnerName = null;                 if (string.IsNullOrEmpty(HostName))                 {                     OwnerName = ContainerName;                 }                 else                 {                     OwnerName = HostName + "." + ContainerName;                 }                 this.Create("MicrosoftDNS_CNAMEType");                 //如果区域不存在                 if (!IsExistsZone(ContainerName))                 {                     Console.WriteLine("区域:{0}不存在,创建失败", ContainerName);                     errMessage = string.Format("区域:{0}不存在,创建失败", ContainerName);                     return false;                 }                 if (IsExistsCNAMEType(ContainerName, OwnerName))                 {                     Console.WriteLine("{0}中已存在{1},创建失败", ContainerName, OwnerName);                     errMessage = string.Format("{0}中已存在{1},创建失败", ContainerName, OwnerName);                     return false;                 }                 MI = DnsClass.GetMethodParameters("CreateInstanceFromPropertyData");                 MI["DnsServerName"] = "localhost";                 MI["ContainerName"] = ContainerName;                 // MI["RecordClass"] = 1;  //Default value is 1.  //1 IN (Internet)  //2 CS (CSNET)   //3 CH (CHAOS)   //4 HS (Hesiod)                  MI["PrimaryName"] = PrimaryName;                 MI["OwnerName"] = OwnerName;                 if (string.IsNullOrEmpty(TTL))                 {                     TTL = "3600";                 }                 MI["TTL"] = TTL;                 DnsClass.InvokeMethod("CreateInstanceFromPropertyData", MI, null);                 errMessage = "CNAME:" + OwnerName + "创建成功.";                 return true;             }             catch (Exception e)             {                 errMessage = e.Message;                 Console.WriteLine(e.ToString());                 return false;             }         }         /// <summary>         /// 修改MicrosoftDNS_CNAMEType记录(别名)         /// </summary>         /// <param name="HostName">主机名 [如果为空或NULL,主机名将与域名保持一致.]</param>         /// <param name="ContainerName">主域名 主域 Name of the Container for the Zone, Cache, or RootHints instance that contains this RR.</param>         /// <param name="TTL">[in, optional] Time, in seconds, that the RR can be cached by a DNS resolver. </param>         /// <param name="PrimaryName">in] Primary name of the CNAME RR</param>         /// <returns></returns>         public bool ModifyCNAMEType(string HostName, string ContainerName, string TTL, string PrimaryName)         {             try             {                 string OwnerName = null;                 if (string.IsNullOrEmpty(HostName))                 {                     OwnerName = ContainerName;                 }                 else                 {                     OwnerName = HostName + "." + ContainerName;                 }                 this.Create("MicrosoftDNS_CNAMEType");                 //如果区域不存在                 if (!IsExistsZone(ContainerName))                 {                     Console.WriteLine("区域:{0}不存在,修改失败", ContainerName);                     errMessage = string.Format("区域:{0}不存在,修改失败", ContainerName);                     return false;                 }                 if (!IsExistsCNAMEType(ContainerName, OwnerName))                 {                     Console.WriteLine("{0}中不存在{1},修改失败", ContainerName, OwnerName);                     errMessage = string.Format("{0}中不存在{1},修改失败", ContainerName, OwnerName);                     return false;                 }                 Q = QueryDNS("Select * From MicrosoftDNS_CNAMEType Where ContainerName='" + ContainerName + "' and OwnerName='" + OwnerName + "'");                 foreach (ManagementObject oManObject in Q)                 {                     if (ClearEndDot(oManObject["PrimaryName"].ToString()) == ClearEndDot(PrimaryName))                     {                         errMessage = "CName记录:" + OwnerName + "修改失败,必须修改别名主机.";                         return false;                     }                     MI = oManObject.GetMethodParameters("Modify");                     if (string.IsNullOrEmpty(TTL))                     {                         TTL = "3600";                     }                     MI["TTL"] = TTL;                     MI["PrimaryName"] = PrimaryName;                     oManObject.InvokeMethod("Modify", MI, null);                     errMessage = "CNAME:" + OwnerName + "修改成功.";                     return true;                 }                 return false;             }             catch (Exception e)             {                 errMessage = e.Message;                 Console.WriteLine(e.ToString());                 return false;             }         }         /// <summary>         /// 删除MicrosoftDNS_CNAMEType         /// </summary>         /// <param name="HostName">主机名 [如果为空或NULL,主机名将与域名保持一致.]</param>         /// <param name="ContainerName">主域名 主域 Name of the Container for the Zone, Cache, or RootHints instance that contains this RR.</param>         /// <returns></returns>         public bool DelCNAMEType(string HostName, string ContainerName)         {             try             {                 string OwnerName = null;                 if (string.IsNullOrEmpty(HostName))                 {                     OwnerName = ContainerName;                 }                 else                 {                     OwnerName = HostName + "." + ContainerName;                 }                 this.Create("MicrosoftDNS_CNAMEType");                 //如果区域不存在                 if (!IsExistsZone(ContainerName))                 {                     Console.WriteLine("区域:{0}不存在,删除失败", ContainerName);                     errMessage = string.Format("区域:{0}不存在,删除失败", ContainerName);                     return false;                 }                 if (!IsExistsCNAMEType(ContainerName, OwnerName))                 {                     Console.WriteLine("{0}中不存在{1},删除失败", ContainerName, OwnerName);                     errMessage = string.Format("{0}中不存在{1},删除失败", ContainerName, OwnerName);                     return false;                 }                 Q = QueryDNS("Select * From MicrosoftDNS_CNAMEType Where ContainerName='" + ContainerName + "' and OwnerName='" + OwnerName + "'");                 foreach (ManagementObject oManObject in Q)                 {                     oManObject.Delete();                     errMessage = "CNAME:" + OwnerName + "删除成功.";                     return true;                 }                 return false;             }             catch (Exception e)             {                 errMessage = e.Message;                 Console.WriteLine(e.ToString());                 return false;             }         }         /// <summary>         /// 去除以.结尾的字符串的.         /// </summary>         /// <param name="str"></param>         /// <returns></returns>         private string ClearEndDot(string str)         {             string returnStr = str;             if (!string.IsNullOrEmpty(str))             {                 int l = str.LastIndexOf(".");                 if (l != -1 && l == str.Length - 1)                 {                     returnStr = str.Substring(0, str.Length - 1);                 }             }             return returnStr;         }     } } 本文来自: 脚本之家(www.jb51.net) 详细出处参考:http://www.jb51.net/article/8045.htm
原创粉丝点击