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

            }

        }

    }

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

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • lldp协议代码阅读_LLDP(lldp协议平时开启还是关闭)

    lldp协议代码阅读_LLDP(lldp协议平时开启还是关闭)没设备,没法试试ndp,不知道disndp是什么效果,和dislldp。有什么区别呢。NDP是邻居发现协议,他也是通过HELLO包机制发现邻居,DISNDP可以看到和它互联的同品牌设备的基本信息以及互联端口。你好!应该是LLDPE产品吧,是线性低密度聚乙烯,主要用来做滚塑产品的我的回答你还满意吗~~不兼容,lldp是lldp,cdp是cdp,现在cisco的设备一般都能支持lldp,lld…

    2022年6月2日
    133
  • NTP校时设置

    NTP校时设置一、WindowsServer2008–TimeServer前言:国家时间与频率标准实验室 &amp;&amp;NTP服务器 也可以忽略1~6直接跳7 如果已改过机码请使用 1    Cmd:2     netstopw32time3     w32tm/unregister4     w32tm/register…

    2022年6月24日
    68
  • Handler和HandlerThread

    Handler和HandlerThread

    2021年12月9日
    45
  • 线程池拒绝策略详解[通俗易懂]

    线程池拒绝策略详解[通俗易懂]线程池拒绝策略详解JDK中已经预设了4种线程池拒绝策略,下面结合场景详细聊聊这些策略的使用场景,以及我们还能扩展哪些拒绝策略。池化设计思想池话设计应该不是一个新名词。我们常见的如java线程池、jdbc连接池、redis连接池等就是这类设计的代表实现。这种设计会初始预设资源,解决的问题就是抵消每次获取资源的消耗,如创建线程的开销,获取远程连接的开销等。就好比你去食堂打饭,打饭的大妈会先…

    2022年6月25日
    33
  • 什么网管工具好_网管功能

    什么网管工具好_网管功能 看看别人用什么:最佳网管工具点评日前,美国《NetworkWorld》通过读者调查,选出了最受读者欢迎的网络管理工具,我们也将它们推荐给国内的网管员们,希望能助他们一臂之力,使他们轻松排除网络故障。  工具名称:SolarWindsEngineerEdition  网址:http://www.solarwinds.net  推荐理由:有读者说:”在不到一小时的时间内

    2022年10月5日
    4
  • 数据时代大数据管理,主要有哪些策略?「建议收藏」

    数据时代大数据管理,主要有哪些策略?「建议收藏」1.对大数据时代的大数据管理框架进行创新在大数据时代的大数据管理形式不断发展过程中,给企业发展带来冲击非常巨大。因此,企业要根据我国信息技术不断发展的形式,对大数据管理框架进行全面的设计和创新,如图1所示。在大数据的处理的过程中,主要是围绕着数据资产进行管理的,同时对大数据时代的大数据管理制度,进行全面的规划行、设计、创新,这样对其它信息技术管理领域,提供了便利的条件。其实,大数据时代的大数据管…

    2022年6月10日
    27

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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