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

2022-11-10 16:29:29 浏览数 (1)

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

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

0 人点赞