在C#中利用wmi操作DNS服务器

在C#中利用wmi操作DNS服务器public class DNSAdminLib    {        //要连接的DNS服务器        private string sServerPath;        //用户名        private string username = null;        //密码        private string password = null;        //服务器

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用
public class DNSAdminLib

    {

        //要连接的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>

        /// DNS服务器名称或IP地址

        /// </summary>

        public string ServerName

        {

            set

            {

                this.sServerPath = string.Format(@”//{0}/root/MicrosoftDNS”, value);

                this.DNSName = value;

            }

        }

        /// <summary>

        /// 连接服务器的用户名

        /// </summary>

        public string userName

        {

            set

            {

                this.username = value;

            }

        }

        /// <summary>

        /// 连接服务器的密码

        /// </summary>

        public string passWord

        {

            set

            {

                this.password = value;

            }

        }

        //构造函数

        public DNSAdminLib()

        {

            sServerPath = @”//localhost/root/MicrosoftDNS”;

            DNSName = “localhost”;

        }

        /// <summary>

        /// 建立对象.连接

        /// </summary>

        /// <param name=”DnsType”>DNS类型 MicrosoftDNS_Zone等</param>

        private void Create(string DnsType)

        {

            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)

        {

            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

            {

                return false;

            }

        }

        /// <summary>

        /// 创建一个新的区域,仅区域名称

        /// </summary>

        /// <param name=”domain”>区域的名称</param>

        public bool CreateZone(string domain)

        {

            try

            {

                this.Create(“MicrosoftDNS_Zone”);

                //如果区域已经存在

                if (IsExistsZone(domain))

                {

                    return false;

                }

                //建立新的区域

                this.MI = DnsClass.GetMethodParameters(“CreateZone”);

                this.MI[“ZoneName”] = domain;

                this.MI[“ZoneType”] = 0;

                ManagementBaseObject OutParams = this.DnsClass.InvokeMethod(“CreateZone”, MI, null);

                return true;

            }

            catch

            {

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

                {

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

                return true;

            }

            catch

            {

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

                    return true;

                }

                return false;

            }

            catch

            {

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

                    return true;

                }

                return false;

            }

            catch

            {

                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

            {

                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=”OwnerName”>Owner name for the RR</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 ContainerName, string OwnerName, string IPAddress)

        {

            try

            {

                this.Create(“MicrosoftDNS_AType”);

                //如果区域不存在

                if (!IsExistsZone(ContainerName))

                {

                    Console.WriteLine(“区域:{0}不存在,创建失败”, ContainerName);

                    return false;

                }

                if (IsExistsAType(ContainerName, OwnerName))

                {

                    Console.WriteLine(“{0}中已存在{1},创建失败”, ContainerName, OwnerName);

                    return false;

                }

                MI = DnsClass.GetMethodParameters(“CreateInstanceFromPropertyData”);

                MI[“DnsServerName”] = “localhost”;

                MI[“ContainerName”] = ContainerName;

                MI[“OwnerName”] = OwnerName;

                MI[“IPAddress”] = IPAddress;

                MI[“TTL”] = 3600;

                DnsClass.InvokeMethod(“CreateInstanceFromPropertyData”, MI, null);

            }

            catch

            {

            }

            return true;

        }

        /// <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=”OwnerName”>Owner name for the RR</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 OwnerName, uint RecordClass, uint TTL, string IPAddress)

        {

            try

            {

                this.Create(“MicrosoftDNS_AType”);

                //如果区域不存在

                if (!IsExistsZone(ContainerName))

                {

                    Console.WriteLine(“区域:{0}不存在,创建失败”, ContainerName);

                    return false;

                }

                if (IsExistsAType(ContainerName, OwnerName))

                {

                    Console.WriteLine(“{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);

                return true;

            }

            catch

            {

                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=”OwnerName”>Owner name for the RR</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 OwnerName, string IPAddress)

        {

            try

            {

                Q = QueryDNS(“Select * From MicrosoftDNS_AType where ContainerName='” + ContainerName + “‘ and OwnerName='” + OwnerName + “‘”, “MicrosoftDNS_AType”);

                foreach (ManagementObject oManObject in Q)

                {

                    MI = oManObject.GetMethodParameters(“Modify”);

                    MI[“IPAddress”] = IPAddress;

                    oManObject.InvokeMethod(“Modify”, MI, null);

                    return true;

                }

                return false;

            }

            catch (Exception ex)

            {

                Console.WriteLine(ex.ToString());

                return false;

            }

        }

        /// <summary>

        /// Made by yaosansi 2005.9 in n169.com

        /// </summary>

        /// <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=”OwnerName”>Owner name for the RR</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 OwnerName, uint TTL, string IPAddress)

        {

            try

            {

                Q = QueryDNS(“Select * From MicrosoftDNS_AType where ContainerName='” + ContainerName + “‘ and OwnerName='” + OwnerName + “‘”, “MicrosoftDNS_AType”);

                foreach (ManagementObject oManObject in Q)

                {

                    MI = oManObject.GetMethodParameters(“Modify”);

                    MI[“TTL”] = TTL;

                    MI[“IPAddress”] = IPAddress;

                    oManObject.InvokeMethod(“Modify”, MI, null);

                    return true;

                }

                return false;

            }

            catch

            {

                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=”OwnerName”>Owner name for the RR</param>

        /// <returns></returns>

        public bool DelAType(string ContainerName, string OwnerName)

        {

            try

            {

                Q = QueryDNS(“Select * From MicrosoftDNS_AType where ContainerName='” + ContainerName + “‘ and OwnerName='” + OwnerName + “‘”, “MicrosoftDNS_AType”);

                foreach (ManagementObject oManObject in Q)

                {

                    oManObject.Delete();

                    return true;

                }

                return false;

            }

            catch

            {

                return false;

            }

        }

    }

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/186909.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号