在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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • linux修改密码的方法_linux密码正确无法登录

    linux修改密码的方法_linux密码正确无法登录情景:Linux服务器上用户的密码被服务器管理员发现太过简单,需要重置密码。处理时为了方便记忆,就直接使用普通用户登录,修改密码时,在原密码的基础上增加一串特定的数字,结果提示不通过。例如出现错误提示”BADPASSWORD:itisbasedonyourusername”。网罗相应的资料得知:1、使用管理员帐号root怎么设置都可以,可以不受验证机制的约束。2、普通用户修改自己…

    2025年9月22日
    5
  • 数论题中(杜教筛)交换求和符号

    数论题中(杜教筛)交换求和符号文章目录方阵下三角约数倍数狄利克雷卷积以及杜教筛学习笔记突然对交换求和符号有了新的理解了,用矩阵转置的思路就很好理解,外层循环相当于枚举行,内层枚举列,交换次序就是先枚举列,再枚举行方阵正常的就是∑i=1n∑j=1nf(i,j)=∑j=1n∑i=1nf(i,j)\sum_{i=1}^n\sum_{j=1}^nf(i,j)=\sum_{j=1}^n\sum_{i=1}^nf(i,j)…

    2022年10月12日
    5
  • python读取modis数据

    python读取modis数据本期记录只上干活,废话不多说,主要是后面与HEG配合使用,实现一系列研究与反演操作。python环境:Python3.5.2+Pycharm模块包:pyhdf安装方法(命令行输入):pipinstallpyhdf一、获取hdf数据集:frompyhdf.SDimportSDHDF_FILR_URL=”E:\Persona_project\Py-Pro…

    2022年5月30日
    37
  • JAVA 正则表达式_正则表达式文档

    JAVA 正则表达式_正则表达式文档一、校验数字的表达式1数字:^[0-9]*$2n位的数字:^\d{n}$3至少n位的数字:^\d{n,}$4m-n位的数字:^\d{m,n}$5零和非零开头的数字:^(0|[1-9][0-9]*)$6非零开头的最多带两位小数的数字:^([1-9][0-9]*)+(.[0-9]{1,2})?$7带1-2位小数的正数或负数:^(\-)?\d+(\.\d{1,2})?…

    2025年12月11日
    3
  • 浅谈UML的概念和模型之UML九种图

    浅谈UML的概念和模型之UML九种图

    2021年11月16日
    45
  • 香农编码简单例题_单链表逆序输出c语言

    香农编码简单例题_单链表逆序输出c语言常量介绍:si:信源符号p(si):该项概率pi:前i-1项累加概率p(s1)+p(s2)+…+p(s(i-1))li:码长,计算公式[-log(p(si))]+1;(下取整)求解步骤:1、将信源符号按从大到小的顺序排列2、求码长li3、求累加概率pi4、将累加概率pi转换为二进制小数,并根据码长li取小数点后li为作为码字介绍:本程序是将原始数据存放到记事本Data.txt中,记事本应…

    2025年8月26日
    8

发表回复

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

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