前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >在C#中利用wmi操作DNS服务器

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

作者头像
全栈程序员站长
发布2022-11-10 16:29:29
8720
发布2022-11-10 16:29:29
举报
文章被收录于专栏:全栈程序员必看

大家好,又见面了,我是你们的朋友全栈君。

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.cn/186909.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年10月2日 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档