欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C#利用WMI操作DNS服務(wù)器(可遠(yuǎn)程操作,需要相應(yīng)權(quán)限)

 更新時(shí)間:2007年03月09日 00:00:00   作者:  
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服務(wù)器(可遠(yuǎn)程操作,需要相應(yīng)權(quán)限)
    /// 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服務(wù)器專用.不適合其它版本操作系統(tǒng).
    /// </summary>
        static void MyDnsTEST()
        {
            Yaosansi.Net.MYDNS dns = new Yaosansi.Net.MYDNS();
            //===========================================
            //不對以下三個(gè)屬性賦值默認(rèn)DNS服務(wù)器為本機(jī).
            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服務(wù)器(可遠(yuǎn)程操作,需要相應(yīng)權(quán)限)
    /// 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服務(wù)器專用.不適合其它版本操作系統(tǒng).
    /// </summary>
    public class MYDNS
    {
        //要連接的DNS服務(wù)器
        private string sServerPath;
        //用戶名
        private string username = null;
        //密碼
        private string password = null;
        //服務(wù)器名稱或IP地址
        private string DNSName = null;
        //表示管理操作的范圍.這里是用來執(zhí)行DNS的命名空間
        private ManagementScope DNS;
        //用于返回檢索的ManagementObject集合
        private System.Management.ManagementObjectCollection Q;
        //
        private ManagementClass DnsClass;
        //
        private ManagementBaseObject MI;

        /// <summary>
        /// 返回的操作信息.
        /// </summary>
        private string errMessage=null;

        /// <summary>
        /// 獲取錯(cuò)誤信息.
        /// </summary>
        public string ErrMessage
        {
            get
            {
                return errMessage;
            }
        }
        /// <summary>
        /// 設(shè)置DNS服務(wù)器名稱或IP地址
        /// </summary>
        public string ServerName
        {
            set
            {
                this.sServerPath = string.Format(@"\\{0}\root\MicrosoftDNS", value);
                this.DNSName = value;
            }
        }

        /// <summary>
        /// 設(shè)置連接服務(wù)器的用戶名(指定服務(wù)器IP,用戶和密碼后將自動(dòng)連接遠(yuǎn)程服務(wù)器,本機(jī)不需要指定)
        /// </summary>
        public string userName
        {
            set
            {
                this.username = value;
            }
        }

        /// <summary>
        /// 設(shè)置連接服務(wù)器的密碼(指定服務(wù)器IP,用戶和密碼后將自動(dòng)連接遠(yuǎn)程服務(wù)器,本機(jī)不需要指定)
        /// </summary>
        public string passWord
        {
            set
            {
                this.password = value;
            }
        }

        /// <summary>
        /// 構(gòu)造函數(shù)
        /// </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>
        /// 判斷區(qū)域是否存在
        /// </summary>
        /// <param name="domain">區(qū)域名稱</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>
        /// 創(chuàng)建一個(gè)新的區(qū)域,僅區(qū)域名稱
        /// </summary>
        /// <param name="domain">區(qū)域的名稱</param>
        public bool CreateZone(string domain)
        {
            try
            {
                this.Create("MicrosoftDNS_Zone");
                //如果區(qū)域已經(jīng)存在
                if (IsExistsZone(domain))
                {
                    errMessage = "域:"+domain+"已經(jīng)存在.";
                    return false;
                }
                //建立新的區(qū)域
                this.MI = DnsClass.GetMethodParameters("CreateZone");
                this.MI["ZoneName"] = domain;
                this.MI["ZoneType"] = 0;

                ManagementBaseObject OutParams = this.DnsClass.InvokeMethod("CreateZone", MI, null);
                errMessage = "域:"+domain+"創(chuàng)建成功.";
                return true;
            }
            catch (Exception e)
            {
                errMessage = e.Message;
                Console.WriteLine(e.ToString());
                return false;
            }

        }


        /// <summary>
        /// 創(chuàng)建一個(gè)區(qū)域,包括其它參數(shù)
        /// </summary>
        /// <param name="domain">要?jiǎng)?chuàng)建的區(qū)域名稱</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");
                //如果區(qū)域已經(jīng)存在
                if (IsExistsZone(domain))
                {
                    errMessage = "域:" + domain + "已經(jīng)存在.";
                    return false;
                }
                //建立新的區(qū)域
                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 + "創(chuàng)建成功.";
                return true;
            }
            catch (Exception e)
            {
                errMessage = e.Message;
                Console.WriteLine(e.ToString());
                return false;
            }

        }


        /// <summary>
        /// 修改區(qū)域
        /// </summary>
        /// <param name="domain">要修改的區(qū)域名稱</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>
        /// 刪除區(qū)域
        /// </summary>
        /// <param name="domain">要冊除的區(qū)域的名稱</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>
        /// 創(chuàng)建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">主機(jī)名 [如果為空或NULL,主機(jī)名將與域名保持一致.]</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");
                //如果區(qū)域不存在
                if (!IsExistsZone(ContainerName))
                {
                    Console.WriteLine("區(qū)域:{0}不存在,創(chuàng)建失敗", ContainerName);
                    errMessage = string.Format("區(qū)域:{0}不存在,創(chuàng)建失敗", ContainerName);
                    return false;
                }
                if (IsExistsAType(ContainerName, OwnerName))
                {
                    Console.WriteLine("{0}中已存在{1},創(chuàng)建失敗", ContainerName, OwnerName);
                    errMessage = string.Format("{0}中已存在{1},創(chuàng)建失敗", 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 + "創(chuàng)建成功.";
                return true;
            }
            catch (Exception e)
            {
                errMessage = e.Message;
                Console.WriteLine(e.ToString());
                return false;
            }

        }


        /// <summary>
        /// 創(chuàng)建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">主機(jī)名 [如果為空或NULL,主機(jī)名將與域名保持一致.]</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");
                //如果區(qū)域不存在
                if (!IsExistsZone(ContainerName))
                {
                    Console.WriteLine("區(qū)域:{0}不存在,創(chuàng)建失敗", ContainerName);
                    errMessage = string.Format("區(qū)域:{0}不存在,創(chuàng)建失敗", ContainerName);
                    return false;
                }
                if (IsExistsAType(ContainerName, OwnerName))
                {
                    Console.WriteLine("{0}中已存在{1},創(chuàng)建失敗", ContainerName, OwnerName);
                    errMessage=string.Format("{0}中已存在{1},創(chuàng)建失敗", 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 + "創(chuàng)建成功.";
                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">主機(jī)名 [如果為空或NULL,主機(jī)名將與域名保持一致.]</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;
                }

                //如果區(qū)域不存在
                if (!IsExistsZone(ContainerName))
                {
                    Console.WriteLine("區(qū)域:{0}不存在,修改失敗", ContainerName);
                    errMessage = string.Format("區(qū)域:{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">主機(jī)名 [如果為空或NULL,主機(jī)名將與域名保持一致.]</param>
        /// <returns></returns>
        public bool DelAType(string ContainerName, string HostName)
        {
            try
            {
                string OwnerName = null;
                if (string.IsNullOrEmpty(HostName))
                {
                    OwnerName = ContainerName;
                }
                else
                {
                    OwnerName = HostName + "." + ContainerName;
                }

                //如果區(qū)域不存在
                if (!IsExistsZone(ContainerName))
                {
                    Console.WriteLine("區(qū)域:{0}不存在,刪除失敗", ContainerName);
                    errMessage = string.Format("區(qū)域:{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("主機(jī)名 (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["主機(jī)名 (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("目標(biāo)主機(jī)");
            table.Columns.Add("優(yōu)先級");
            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["目標(biāo)主機(jī)"] = oManObject["MailExchange"];
                        row["郵件交換記錄 (MX)"] = oManObject["OwnerName"];
                        row["優(yōu)先級"] = 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("別名主機(jī)");
            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["別名主機(jī)"] = 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>
        /// 創(chuàng)建MicrosoftDNS_MXType記錄(郵件交換記錄)
        /// </summary>
        /// <param name="HostName">主機(jī)名 [如果為空或NULL,主機(jī)名將與域名保持一致.]</param>
        /// <param name="ContainerName">主域 Name of the Container for the Zone, Cache, or RootHints instance that contains this RR.</param>
        /// <param name="MailExchange">目標(biāo)主機(jī) FQDN specifying a host willing to act as a mail exchange for the owner name</param>
        /// <param name="Preference">優(yōu)先級 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");
                //如果區(qū)域不存在
                if (!IsExistsZone(ContainerName))
                {
                    Console.WriteLine("區(qū)域:{0}不存在,創(chuàng)建失敗", ContainerName);
                    errMessage = string.Format("區(qū)域:{0}不存在,創(chuàng)建失敗", ContainerName);
                    return false;
                }
                if (IsExistsMXType(ContainerName,OwnerName))
                {
                    Console.WriteLine("{0}中已存在{1},創(chuàng)建失敗", ContainerName,OwnerName );
                    errMessage = string.Format("{0}中已存在{1},創(chuàng)建失敗", 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 + "創(chuàng)建成功.";
                return true;
            }
            catch (Exception e)
            {
                errMessage = e.Message;
                Console.WriteLine(e.ToString());
                return false;
            }

        }

        /// <summary>
        /// 修改MicrosoftDNS_MXType記錄(修改郵件交換記錄)
        /// </summary>
        /// <param name="HostName">主機(jī)名 [如果為空或NULL,主機(jī)名將與域名保持一致.]</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">郵件優(yōu)先級 [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");
                //如果區(qū)域不存在
                if (!IsExistsZone(ContainerName))
                {
                    Console.WriteLine("區(qū)域:{0}不存在,修改失敗", ContainerName);
                    errMessage = string.Format("區(qū)域:{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 + "修改失敗,必須修改目標(biāo)主機(jī)或郵件優(yōu)先級.";
                        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">主機(jī)名 [如果為空或NULL,主機(jī)名將與域名保持一致.]</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");
                //如果區(qū)域不存在
                if (!IsExistsZone(ContainerName))
                {
                    Console.WriteLine("區(qū)域:{0}不存在,刪除失敗", ContainerName);
                    errMessage = string.Format("區(qū)域:{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>
        /// 創(chuàng)建MicrosoftDNS_CNAMEType記錄(別名)
        /// </summary>
        /// <param name="HostName">主機(jī)名 [如果為空或NULL,主機(jī)名將與域名保持一致.]</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");
                //如果區(qū)域不存在
                if (!IsExistsZone(ContainerName))
                {
                    Console.WriteLine("區(qū)域:{0}不存在,創(chuàng)建失敗", ContainerName);
                    errMessage = string.Format("區(qū)域:{0}不存在,創(chuàng)建失敗", ContainerName);
                    return false;
                }
                if (IsExistsCNAMEType(ContainerName, OwnerName))
                {
                    Console.WriteLine("{0}中已存在{1},創(chuàng)建失敗", ContainerName, OwnerName);
                    errMessage = string.Format("{0}中已存在{1},創(chuàng)建失敗", 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 + "創(chuàng)建成功.";
                return true;
            }
            catch (Exception e)
            {
                errMessage = e.Message;
                Console.WriteLine(e.ToString());
                return false;
            }

        }

        /// <summary>
        /// 修改MicrosoftDNS_CNAMEType記錄(別名)
        /// </summary>
        /// <param name="HostName">主機(jī)名 [如果為空或NULL,主機(jī)名將與域名保持一致.]</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");
                //如果區(qū)域不存在
                if (!IsExistsZone(ContainerName))
                {
                    Console.WriteLine("區(qū)域:{0}不存在,修改失敗", ContainerName);
                    errMessage = string.Format("區(qū)域:{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 + "修改失敗,必須修改別名主機(jī).";
                        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">主機(jī)名 [如果為空或NULL,主機(jī)名將與域名保持一致.]</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");
                //如果區(qū)域不存在
                if (!IsExistsZone(ContainerName))
                {
                    Console.WriteLine("區(qū)域:{0}不存在,刪除失敗", ContainerName);
                    errMessage = string.Format("區(qū)域:{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>
        /// 去除以.結(jié)尾的字符串的.
        /// </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;
        }

    }
}

相關(guān)文章

  • c# RPC框架的使用簡介

    c# RPC框架的使用簡介

    這篇文章主要介紹了c# RPC框架的使用簡介,幫助大家更好的理解和使用c#,感興趣的朋友可以了解下
    2021-02-02
  • C#實(shí)現(xiàn)簡單點(diǎn)餐系統(tǒng)

    C#實(shí)現(xiàn)簡單點(diǎn)餐系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了C#實(shí)現(xiàn)簡單點(diǎn)餐系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-07-07
  • Unity Shader實(shí)現(xiàn)紋理遮罩效果

    Unity Shader實(shí)現(xiàn)紋理遮罩效果

    這篇文章主要為大家詳細(xì)介紹了Unity Shader實(shí)現(xiàn)紋理遮罩效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-04-04
  • dotnet core鏈接mongodb代碼實(shí)例

    dotnet core鏈接mongodb代碼實(shí)例

    這篇文章主要介紹了dotnet core鏈接mongodb代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-12-12
  • C#逐行讀取文件的方法

    C#逐行讀取文件的方法

    這篇文章主要介紹了C#逐行讀取文件的方法,針對較大文件的讀取非常實(shí)用,需要的朋友可以參考下
    2015-07-07
  • C#中timer類的用法總結(jié)

    C#中timer類的用法總結(jié)

    System.Windows.Forms.Timer是應(yīng)用于WinForm中的,它是通過Windows消息機(jī)制實(shí)現(xiàn)的,類似于VB或Delphi中的Timer控件,內(nèi)部使用API SetTimer實(shí)現(xiàn)的。它的主要缺點(diǎn)是計(jì)時(shí)不精確,而且必須有消息循環(huán)
    2013-10-10
  • C#實(shí)現(xiàn)逐行讀取和寫入文件的方法

    C#實(shí)現(xiàn)逐行讀取和寫入文件的方法

    這篇文章給大家介紹了使用C#語言實(shí)現(xiàn)同樣的功能,即從輸入文件中讀取每行數(shù)據(jù),然后將每行字段組合成SQL插入腳本,然后逐行寫入另外一個(gè)空白文件中,感興趣的朋友可以參考下
    2024-01-01
  • WPF彈出右鍵菜單時(shí)判斷鼠標(biāo)是否選中該項(xiàng)

    WPF彈出右鍵菜單時(shí)判斷鼠標(biāo)是否選中該項(xiàng)

    這篇文章介紹了WPF彈出右鍵菜單時(shí)判斷鼠標(biāo)是否選中該項(xiàng)的方法,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-06-06
  • C#使用yield關(guān)鍵字讓自定義集合實(shí)現(xiàn)foreach遍歷的方法

    C#使用yield關(guān)鍵字讓自定義集合實(shí)現(xiàn)foreach遍歷的方法

    這篇文章主要介紹了C#使用yield關(guān)鍵字讓自定義集合實(shí)現(xiàn)foreach遍歷的方法,需要的朋友可以參考下
    2014-08-08
  • C#控件編程之顯示信息控件詳解(Label、LinkLabel)

    C#控件編程之顯示信息控件詳解(Label、LinkLabel)

    這篇文章主要介紹了C#控件編程之顯示信息控件詳解(Label、LinkLabel),具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2025-04-04

最新評論