C#利用WMI操作DNS服務(wù)器(可遠(yuǎn)程操作,需要相應(yīng)權(quán)限)
更新時(shí)間:2007年03月09日 00:00:00 作者:
using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
namespace Yaosansi
{
class Test
{
static void Main()
{
MyDnsTEST();
}
/// <summary>
/// MyDnsTEST功能測(cè)試
/// C#利用WMI操作DNS服務(wù)器(可遠(yuǎn)程操作,需要相應(yīng)權(quán)限)
/// Author:yaosansi
/// Create Date:2005-09-07
/// Modify Date:2006-10-25
/// Site:http://www.yaosansi.com/
/// E-mail:yaosansi at 126 dot com
/// http://www.yaosansi.com/blog/article.asp?id=935
/// http://yaosansi.cnblogs.com/archive/2006/11/04/DNSServiceInCsharpWithWMI.html
/// 注意:此版本為WINDOWS2003 DNS服務(wù)器專(zhuān)用.不適合其它版本操作系統(tǒng).
/// </summary>
static void MyDnsTEST()
{
Yaosansi.Net.MYDNS dns = new Yaosansi.Net.MYDNS();
//===========================================
//不對(duì)以下三個(gè)屬性賦值默認(rèn)DNS服務(wù)器為本機(jī).
dns.ServerName = "202.96.64.68";
dns.userName = "Administrator";
dns.passWord = "123456789";
//===========================================
//dns.CreateZone("yaosansi.com");
//dns.DelZone("yaosansi.com");
//dns.CreateAType("yaosansi.com", "www", "2.2.2.2", "3600");
//dns.ModifyAType("yaosansi.com","www","127.21.0.1","800");
//dns.DelAType("yaosansi.com", "mail");
//dns.CreateMXType("mail", "yaosansi.com", "5.5.5.5", "20", "3600");
//dns.ModifyMXType("mail", "yaosansi.com", "36000", "218.1.1.1", "26");
//dns.DelMXType("mail", "yaosansi.com");
//dns.CreateCNAMEType("mpq2", "yaosansi.com", "www.yaosansi.com", "3900");
//dns.ModifyCNAMEType("mpq2", "abc.com", "30520", "www.yaosansi.com.");
//dns.DelCNAMEType("mpq", "yaosansi.com");
//DataTable table = dns.ListExistsMXType("yaosansi.com");
DataTable table = dns.ListExistsAType("yaosansi.com");
//DataTable table = dns.ListExistsCNAMEType("yaosansi.com");
Yaosansi.Data.DataHelp.PrintTable(table);
if (!string.IsNullOrEmpty(dns.ErrMessage))
{
Console.WriteLine("--------------------------------------------------");
Console.WriteLine("返回信息:" + dns.ErrMessage);
Console.WriteLine("--------------------------------------------------");
}
Console.WriteLine("");
Console.WriteLine("===End===");
Console.ReadLine();
}
}
}
using System;
using System.Management;
using System.Data;
namespace Yaosansi.Net
{
/// <summary>
/// C#利用WMI操作DNS服務(wù)器(可遠(yuǎn)程操作,需要相應(yīng)權(quán)限)
/// Author:yaosansi
/// Create Date:2005-09-07
/// Modify Date:2006-10-25
/// Site:http://www.yaosansi.com/
/// E-mail:yaosansi at 126 dot com
/// http://www.yaosansi.com/blog/article.asp?id=935
/// http://yaosansi.cnblogs.com/archive/2006/11/04/DNSServiceInCsharpWithWMI.html
/// 注意:此版本為WINDOWS2003 DNS服務(wù)器專(zhuān)用.不適合其它版本操作系統(tǒng).
/// </summary>
public class MYDNS
{
//要連接的DNS服務(wù)器
private string sServerPath;
//用戶(hù)名
private string username = null;
//密碼
private string password = null;
//服務(wù)器名稱(chēng)或IP地址
private string DNSName = null;
//表示管理操作的范圍.這里是用來(lái)執(zhí)行DNS的命名空間
private ManagementScope DNS;
//用于返回檢索的ManagementObject集合
private System.Management.ManagementObjectCollection Q;
//
private ManagementClass DnsClass;
//
private ManagementBaseObject MI;
/// <summary>
/// 返回的操作信息.
/// </summary>
private string errMessage=null;
/// <summary>
/// 獲取錯(cuò)誤信息.
/// </summary>
public string ErrMessage
{
get
{
return errMessage;
}
}
/// <summary>
/// 設(shè)置DNS服務(wù)器名稱(chēng)或IP地址
/// </summary>
public string ServerName
{
set
{
this.sServerPath = string.Format(@"\\{0}\root\MicrosoftDNS", value);
this.DNSName = value;
}
}
/// <summary>
/// 設(shè)置連接服務(wù)器的用戶(hù)名(指定服務(wù)器IP,用戶(hù)和密碼后將自動(dòng)連接遠(yuǎn)程服務(wù)器,本機(jī)不需要指定)
/// </summary>
public string userName
{
set
{
this.username = value;
}
}
/// <summary>
/// 設(shè)置連接服務(wù)器的密碼(指定服務(wù)器IP,用戶(hù)和密碼后將自動(dòng)連接遠(yuǎn)程服務(wù)器,本機(jī)不需要指定)
/// </summary>
public string passWord
{
set
{
this.password = value;
}
}
/// <summary>
/// 構(gòu)造函數(shù)
/// </summary>
public MYDNS()
{
sServerPath = @"\\localhost\root\MicrosoftDNS";
DNSName = "localhost";
}
/// <summary>
/// 建立對(duì)象.連接
/// </summary>
/// <param name="DnsType">DNS類(lèi)型 MicrosoftDNS_Zone等</param>
private void Create(string DnsType)
{
if (!string.IsNullOrEmpty(username) && !string.IsNullOrEmpty(password))
{
System.Management.ConnectionOptions Conn = new ConnectionOptions();
Conn.Username = username; //用戶(hù)名
Conn.Password = password; //口令
DNS = new ManagementScope(sServerPath,Conn);
}
else
{
DNS = new ManagementScope(sServerPath);
}
if (!DNS.IsConnected)
{
DNS.Connect();
}
ManagementPath Path = new ManagementPath(DnsType);
this.DnsClass = new ManagementClass(DNS, Path, null);
}
/// <summary>
/// 查詢(xún)DNS并建立對(duì)象
/// </summary>
/// <param name="query">WQL查詢(xún)語(yǔ)句</param>
/// <param name="DnsType">DNS類(lèi)型 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>
/// 僅查詢(xún)DNS
/// </summary>
/// <param name="query">WQL查詢(xún)語(yǔ)句</param>
/// <returns></returns>
public ManagementObjectCollection QueryDNS(string query)
{
if (!string.IsNullOrEmpty(username) && !string.IsNullOrEmpty(password))
{
System.Management.ConnectionOptions Conn = new ConnectionOptions();
Conn.Username = username; //用戶(hù)名
Conn.Password = password; //口令
DNS = new ManagementScope(sServerPath, Conn);
}
else
{
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>
/// 判斷區(qū)域是否存在
/// </summary>
/// <param name="domain">區(qū)域名稱(chēng)</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 (Exception e)
{
errMessage = e.Message;
Console.WriteLine(e.ToString());
return false;
}
}
/// <summary>
/// 創(chuàng)建一個(gè)新的區(qū)域,僅區(qū)域名稱(chēng)
/// </summary>
/// <param name="domain">區(qū)域的名稱(chēng)</param>
public bool CreateZone(string domain)
{
try
{
this.Create("MicrosoftDNS_Zone");
//如果區(qū)域已經(jīng)存在
if (IsExistsZone(domain))
{
errMessage = "域:"+domain+"已經(jīng)存在.";
return false;
}
//建立新的區(qū)域
this.MI = DnsClass.GetMethodParameters("CreateZone");
this.MI["ZoneName"] = domain;
this.MI["ZoneType"] = 0;
ManagementBaseObject OutParams = this.DnsClass.InvokeMethod("CreateZone", MI, null);
errMessage = "域:"+domain+"創(chuàng)建成功.";
return true;
}
catch (Exception e)
{
errMessage = e.Message;
Console.WriteLine(e.ToString());
return false;
}
}
/// <summary>
/// 創(chuàng)建一個(gè)區(qū)域,包括其它參數(shù)
/// </summary>
/// <param name="domain">要?jiǎng)?chuàng)建的區(qū)域名稱(chēng)</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");
//如果區(qū)域已經(jīng)存在
if (IsExistsZone(domain))
{
errMessage = "域:" + domain + "已經(jīng)存在.";
return false;
}
//建立新的區(qū)域
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);
errMessage = "域:" + domain + "創(chuàng)建成功.";
return true;
}
catch (Exception e)
{
errMessage = e.Message;
Console.WriteLine(e.ToString());
return false;
}
}
/// <summary>
/// 修改區(qū)域
/// </summary>
/// <param name="domain">要修改的區(qū)域名稱(chēng)</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);
errMessage = "域:" + domain + "修改成功.";
return true;
}
errMessage = "未找到域:"+domain;
return false;
}
catch (Exception e)
{
errMessage = e.Message;
Console.WriteLine(e.ToString());
return false;
}
}
/// <summary>
/// 刪除區(qū)域
/// </summary>
/// <param name="domain">要冊(cè)除的區(qū)域的名稱(chēng)</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();
errMessage = "域:" + domain + "刪除成功.";
return true;
}
errMessage = "未找到域:" + domain;
return false;
}
catch (Exception e)
{
errMessage = e.Message;
Console.WriteLine(e.ToString());
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 (Exception e)
{
errMessage = e.Message;
Console.WriteLine(e.ToString());
return false;
}
}
/// <summary>
/// 創(chuàng)建MicrosoftDNS_AType
/// </summary>
/// <param name="ContainerName">Name of the Container for the Zone, Cache, or RootHints instance which contains this RR</param>
/// <param name="HostName">主機(jī)名 [如果為空或NULL,主機(jī)名將與域名保持一致.]</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 HostName, string IPAddress,string TTL)
{
try
{
string OwnerName = null;
if (string.IsNullOrEmpty(HostName))
{
OwnerName = ContainerName;
}
else
{
OwnerName = HostName + "." + ContainerName;
}
this.Create("MicrosoftDNS_AType");
//如果區(qū)域不存在
if (!IsExistsZone(ContainerName))
{
Console.WriteLine("區(qū)域:{0}不存在,創(chuàng)建失敗", ContainerName);
errMessage = string.Format("區(qū)域:{0}不存在,創(chuàng)建失敗", ContainerName);
return false;
}
if (IsExistsAType(ContainerName, OwnerName))
{
Console.WriteLine("{0}中已存在{1},創(chuàng)建失敗", ContainerName, OwnerName);
errMessage = string.Format("{0}中已存在{1},創(chuàng)建失敗", ContainerName, OwnerName);
return false;
}
MI = DnsClass.GetMethodParameters("CreateInstanceFromPropertyData");
MI["DnsServerName"] = "localhost";
MI["ContainerName"] = ContainerName;
MI["OwnerName"] = OwnerName;
MI["IPAddress"] = IPAddress;
if (string.IsNullOrEmpty(TTL))
{
TTL = "3600";
}
MI["TTL"] =TTL;
DnsClass.InvokeMethod("CreateInstanceFromPropertyData", MI, null);
errMessage = "A記錄:" + OwnerName + "創(chuàng)建成功.";
return true;
}
catch (Exception e)
{
errMessage = e.Message;
Console.WriteLine(e.ToString());
return false;
}
}
/// <summary>
/// 創(chuàng)建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="HostName">主機(jī)名 [如果為空或NULL,主機(jī)名將與域名保持一致.]</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 HostName, uint RecordClass, uint TTL, string IPAddress)
{
try
{
string OwnerName = null;
if (string.IsNullOrEmpty(HostName))
{
OwnerName = ContainerName;
}
else
{
OwnerName = HostName + "." + ContainerName;
}
this.Create("MicrosoftDNS_AType");
//如果區(qū)域不存在
if (!IsExistsZone(ContainerName))
{
Console.WriteLine("區(qū)域:{0}不存在,創(chuàng)建失敗", ContainerName);
errMessage = string.Format("區(qū)域:{0}不存在,創(chuàng)建失敗", ContainerName);
return false;
}
if (IsExistsAType(ContainerName, OwnerName))
{
Console.WriteLine("{0}中已存在{1},創(chuàng)建失敗", ContainerName, OwnerName);
errMessage=string.Format("{0}中已存在{1},創(chuàng)建失敗", 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);
errMessage = "A記錄:" + OwnerName + "創(chuàng)建成功.";
return true;
}
catch (Exception e)
{
errMessage = e.Message;
Console.WriteLine(e.ToString());
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="HostName">主機(jī)名 [如果為空或NULL,主機(jī)名將與域名保持一致.]</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 HostName, string IPAddress,string TTL)
{
try
{
string OwnerName = null;
if (string.IsNullOrEmpty(HostName))
{
OwnerName = ContainerName;
}
else
{
OwnerName = HostName + "." + ContainerName;
}
//如果區(qū)域不存在
if (!IsExistsZone(ContainerName))
{
Console.WriteLine("區(qū)域:{0}不存在,修改失敗", ContainerName);
errMessage = string.Format("區(qū)域:{0}不存在,修改失敗", ContainerName);
return false;
}
if (!IsExistsAType(ContainerName, OwnerName))
{
Console.WriteLine("{0}中不存在{1},修改失敗", ContainerName, OwnerName);
errMessage = string.Format("{0}中不存在{1},修改失敗", ContainerName, OwnerName);
return false;
}
Q = QueryDNS("Select * From MicrosoftDNS_AType where ContainerName='" + ContainerName + "' and OwnerName='" + OwnerName + "'", "MicrosoftDNS_AType");
foreach (ManagementObject oManObject in Q)
{
//foreach (PropertyData p in oManObject.Properties)
//{
// try
// { Console.WriteLine(p.Name+"="+oManObject[p.Name]); }
// catch
// { }
//}
if (oManObject["IPAddress"].ToString() == IPAddress)
{
errMessage = "A記錄:" + OwnerName + "修改失敗,必須修改IP地址.";
return false;
}
MI = oManObject.GetMethodParameters("Modify");
MI["IPAddress"] = IPAddress;
MI["TTL"] = TTL;
oManObject.InvokeMethod("Modify", MI, null);
errMessage = "A記錄:" + OwnerName + "修改成功.";
return true;
}
errMessage = string.Format("{0}中不存在{1},修改失敗", ContainerName, OwnerName);
return false;
}
catch (Exception e)
{
errMessage = e.Message;
Console.WriteLine(e.ToString());
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="HostName">主機(jī)名 [如果為空或NULL,主機(jī)名將與域名保持一致.]</param>
/// <returns></returns>
public bool DelAType(string ContainerName, string HostName)
{
try
{
string OwnerName = null;
if (string.IsNullOrEmpty(HostName))
{
OwnerName = ContainerName;
}
else
{
OwnerName = HostName + "." + ContainerName;
}
//如果區(qū)域不存在
if (!IsExistsZone(ContainerName))
{
Console.WriteLine("區(qū)域:{0}不存在,刪除失敗", ContainerName);
errMessage = string.Format("區(qū)域:{0}不存在,刪除失敗", ContainerName);
return false;
}
if (!IsExistsAType(ContainerName, OwnerName))
{
Console.WriteLine("{0}中不存在{1},刪除失敗", ContainerName, OwnerName);
errMessage = string.Format("{0}中不存在{1},刪除失敗", ContainerName, OwnerName);
return false;
}
Q = QueryDNS("Select * From MicrosoftDNS_AType where ContainerName='" + ContainerName + "' and OwnerName='" + OwnerName + "'", "MicrosoftDNS_AType");
foreach (ManagementObject oManObject in Q)
{
oManObject.Delete();
errMessage = "A記錄:" + OwnerName + "刪除成功.";
return true;
}
errMessage = string.Format("{0}中不存在{1},刪除失敗", ContainerName, OwnerName);
return false;
}
catch (Exception e)
{
errMessage = e.Message;
Console.WriteLine(e.ToString());
return false;
}
}
/// <summary>
/// 列出某域名下的所有A記錄.
/// </summary>
/// <param name="ContainerName">Name of the Container for the Zone, Cache, or RootHints instance which contains this RR</param>
/// <returns></returns>
public DataTable ListExistsAType(string ContainerName)
{
Yaosansi.IO.Log log = new Yaosansi.IO.Log();
log.WirteLogTime();
log.WirteLog(ContainerName);
DataTable table = new DataTable("MicrosoftDNS_AType" + ContainerName);
table.Columns.Add("主機(jī)名 (A)");
table.Columns.Add("IP 地址");
table.Columns.Add("TTL");
try
{
Q = QueryDNS("Select * From MicrosoftDNS_AType where ContainerName='" + ContainerName + "'");
foreach (ManagementObject oManObject in Q)
{
try
{
DataRow row = table.NewRow();
row["主機(jī)名 (A)"] = oManObject["OwnerName"];
row["IP 地址"] = oManObject["IPAddress"];
row["TTL"] = oManObject["TTL"];
table.Rows.Add(row);
}
catch (Exception e) { log.WirteLog(e.ToString()); }
}
}
catch (Exception e)
{
errMessage = e.Message;
Console.WriteLine(e.ToString());
log.WirteLog(e.ToString());
}
Yaosansi.Data.DataHelp.PrintTableLog(table);
return table;
}
/// <summary>
/// 列出某域名下的所有MX記錄.
/// </summary>
/// <param name="ContainerName">Name of the Container for the Zone, Cache, or RootHints instance which contains this RR</param>
/// <returns></returns>
public DataTable ListExistsMXType(string ContainerName)
{
DataTable table = new DataTable("MicrosoftDNS_MXType" + ContainerName);
table.Columns.Add("郵件交換記錄 (MX)");
table.Columns.Add("目標(biāo)主機(jī)");
table.Columns.Add("優(yōu)先級(jí)");
table.Columns.Add("TTL");
try
{
Q = QueryDNS("Select * From MicrosoftDNS_MXType where ContainerName='" + ContainerName + "'");
foreach (ManagementObject oManObject in Q)
{
try
{
DataRow row = table.NewRow();
row["目標(biāo)主機(jī)"] = oManObject["MailExchange"];
row["郵件交換記錄 (MX)"] = oManObject["OwnerName"];
row["優(yōu)先級(jí)"] = oManObject["Preference"];
row["TTL"] = oManObject["TTL"];
table.Rows.Add(row);
}
catch { }
}
}
catch (Exception e)
{
errMessage = e.Message;
Console.WriteLine(e.ToString());
}
return table;
}
/// <summary>
/// 列出某域名下的所有別名.
/// </summary>
/// <param name="ContainerName">Name of the Container for the Zone, Cache, or RootHints instance which contains this RR</param>
/// <returns></returns>
public DataTable ListExistsCNAMEType(string ContainerName)
{
DataTable table = new DataTable("MicrosoftDNS_CNAMEType" + ContainerName);
table.Columns.Add("別名 (CNAME)");
table.Columns.Add("別名主機(jī)");
table.Columns.Add("TTL");
try
{
Q = QueryDNS("Select * From MicrosoftDNS_CNAMEType where ContainerName='" + ContainerName + "'");
foreach (ManagementObject oManObject in Q)
{
try
{
DataRow row = table.NewRow();
row["別名 (CNAME)"] = oManObject["OwnerName"];
row["別名主機(jī)"] = oManObject["PrimaryName"];
row["TTL"] = oManObject["TTL"];
table.Rows.Add(row);
}
catch { }
}
}
catch (Exception e)
{
errMessage = e.Message;
Console.WriteLine(e.ToString());
}
return table;
}
/// <summary>
/// 判斷在某MicrosoftDNS_MXType是否在指定的域中存在
/// </summary>
/// <param name="ContainerName">主域名 主域 Name of the Container for the Zone, Cache, or RootHints instance that contains this RR.</param>
/// <param name="OwnerName">Owner name for the RR. </param>
/// <returns></returns>
public bool IsExistsMXType(string ContainerName, string OwnerName)
{
try
{
Q = QueryDNS("Select * From MicrosoftDNS_MXType Where ContainerName='" + ContainerName + "' and OwnerName='" + OwnerName + "'");
foreach (ManagementObject oManObject in Q)
{
// Console.WriteLine(oManObject["MailExchange"].ToString());
return true;
}
return false;
}
catch (Exception e)
{
errMessage = e.Message;
Console.WriteLine(e.ToString());
return false;
}
}
/// <summary>
/// 創(chuàng)建MicrosoftDNS_MXType記錄(郵件交換記錄)
/// </summary>
/// <param name="HostName">主機(jī)名 [如果為空或NULL,主機(jī)名將與域名保持一致.]</param>
/// <param name="ContainerName">主域 Name of the Container for the Zone, Cache, or RootHints instance that contains this RR.</param>
/// <param name="MailExchange">目標(biāo)主機(jī) FQDN specifying a host willing to act as a mail exchange for the owner name</param>
/// <param name="Preference">優(yōu)先級(jí) Preference given to this RR among others at the same owner. Lower values are preferred</param>
/// <param name="TTL">Time, in seconds, that the RR can be cached by a DNS resolver</param>
/// <returns></returns>
public bool CreateMXType(string HostName, string ContainerName,string MailExchange, string Preference, string TTL)
{
try
{
string OwnerName = null;
if (string.IsNullOrEmpty(HostName))
{
OwnerName = ContainerName;
}
else
{
OwnerName = HostName + "." + ContainerName;
}
this.Create("MicrosoftDNS_MXType");
//如果區(qū)域不存在
if (!IsExistsZone(ContainerName))
{
Console.WriteLine("區(qū)域:{0}不存在,創(chuàng)建失敗", ContainerName);
errMessage = string.Format("區(qū)域:{0}不存在,創(chuàng)建失敗", ContainerName);
return false;
}
if (IsExistsMXType(ContainerName,OwnerName))
{
Console.WriteLine("{0}中已存在{1},創(chuàng)建失敗", ContainerName,OwnerName );
errMessage = string.Format("{0}中已存在{1},創(chuàng)建失敗", ContainerName, OwnerName);
return false;
}
MI = DnsClass.GetMethodParameters("CreateInstanceFromPropertyData");
MI["DnsServerName"] = "localhost";
MI["ContainerName"] = ContainerName;
// MI["RecordClass"] = 1; //Default value is 1. //1 IN (Internet) //2 CS (CSNET) //3 CH (CHAOS) //4 HS (Hesiod)
MI["MailExchange"] = MailExchange;
MI["OwnerName"] = OwnerName;
MI["Preference"] = Preference;
if (string.IsNullOrEmpty(TTL))
{
TTL = "3600";
}
MI["TTL"] = TTL;
DnsClass.InvokeMethod("CreateInstanceFromPropertyData", MI, null);
errMessage = "MX記錄:" + OwnerName + "創(chuàng)建成功.";
return true;
}
catch (Exception e)
{
errMessage = e.Message;
Console.WriteLine(e.ToString());
return false;
}
}
/// <summary>
/// 修改MicrosoftDNS_MXType記錄(修改郵件交換記錄)
/// </summary>
/// <param name="HostName">主機(jī)名 [如果為空或NULL,主機(jī)名將與域名保持一致.]</param>
/// <param name="ContainerName">主域名 主域 Name of the Container for the Zone, Cache, or RootHints instance that contains this RR.</param>
/// <param name="TTL">[in, optional] Time, in seconds, that the RR can be cached by a DNS resolver. </param>
/// <param name="MailExchange">[in, optional] FQDN specifying a host willing to act as a mail exchange for the owner name. </param>
/// <param name="Preference">郵件優(yōu)先級(jí) [in, optional] Preference given to this RR among others at the same owner. Lower values are preferred. </param>
/// <returns></returns>
public bool ModifyMXType(string HostName, string ContainerName, string TTL, string MailExchange,string Preference)
{
try
{
string OwnerName = null;
if (string.IsNullOrEmpty(HostName))
{
OwnerName = ContainerName;
}
else
{
OwnerName = HostName + "." + ContainerName;
}
this.Create("MicrosoftDNS_MXType");
//如果區(qū)域不存在
if (!IsExistsZone(ContainerName))
{
Console.WriteLine("區(qū)域:{0}不存在,修改失敗", ContainerName);
errMessage = string.Format("區(qū)域:{0}不存在,修改失敗", ContainerName);
return false;
}
if (!IsExistsMXType(ContainerName, OwnerName))
{
Console.WriteLine("{0}中不存在{1},修改失敗", ContainerName, OwnerName);
errMessage = string.Format("{0}中不存在{1},修改失敗", ContainerName, OwnerName);
return false;
}
Q = QueryDNS("Select * From MicrosoftDNS_MXType Where ContainerName='" + ContainerName + "' and OwnerName='" + OwnerName + "'");
foreach (ManagementObject oManObject in Q)
{
MI = oManObject.GetMethodParameters("Modify");
if (string.IsNullOrEmpty(TTL))
{
TTL = "3600";
}
if (ClearEndDot(oManObject["MailExchange"].ToString()) == ClearEndDot(MailExchange) && oManObject["Preference"].ToString() == Preference)
{
errMessage = "MX記錄:" + OwnerName + "修改失敗,必須修改目標(biāo)主機(jī)或郵件優(yōu)先級(jí).";
return false;
}
MI["TTL"] = TTL;
MI["MailExchange"] = MailExchange;
MI["Preference"] = Preference;
oManObject.InvokeMethod("Modify", MI, null);
errMessage = "MX記錄:" + OwnerName + "修改成功.";
return true;
}
return false;
}
catch (Exception e)
{
errMessage = e.Message;
Console.WriteLine(e.ToString());
return false;
}
}
/// <summary>
/// 刪除MicrosoftDNS_MXType
/// </summary>
/// <param name="HostName">主機(jī)名 [如果為空或NULL,主機(jī)名將與域名保持一致.]</param>
/// <param name="ContainerName">主域名 主域 Name of the Container for the Zone, Cache, or RootHints instance that contains this RR.</param>
/// <returns></returns>
public bool DelMXType(string HostName, string ContainerName)
{
try
{
string OwnerName = null;
if (string.IsNullOrEmpty(HostName))
{
OwnerName = ContainerName;
}
else
{
OwnerName = HostName + "." + ContainerName;
}
this.Create("MicrosoftDNS_MXType");
//如果區(qū)域不存在
if (!IsExistsZone(ContainerName))
{
Console.WriteLine("區(qū)域:{0}不存在,刪除失敗", ContainerName);
errMessage = string.Format("區(qū)域:{0}不存在,刪除失敗", ContainerName);
return false;
}
if (!IsExistsMXType(ContainerName, OwnerName))
{
Console.WriteLine("{0}中不存在{1},刪除失敗", ContainerName, OwnerName);
errMessage = string.Format("{0}中不存在{1},刪除失敗", ContainerName, OwnerName);
return false;
}
Q = QueryDNS("Select * From MicrosoftDNS_MXType Where ContainerName='" + ContainerName + "' and OwnerName='" + OwnerName + "'");
foreach (ManagementObject oManObject in Q)
{
oManObject.Delete();
errMessage = "MX記錄:" + OwnerName + "刪除成功.";
return true;
}
return false;
}
catch (Exception e)
{
errMessage = e.Message;
Console.WriteLine(e.ToString());
return false;
}
}
/// <summary>
/// 判斷在某MicrosoftDNS_CNAMEType是否在指定的域中存在
/// </summary>
/// <param name="ContainerName">主域名 主域 Name of the Container for the Zone, Cache, or RootHints instance that contains this RR.</param>
/// <param name="OwnerName">Owner name for the RR. </param>
/// <returns></returns>
public bool IsExistsCNAMEType(string ContainerName, string OwnerName)
{
try
{
Q = QueryDNS("Select * From MicrosoftDNS_CNAMEType Where ContainerName='" + ContainerName + "' and OwnerName='" + OwnerName + "'");
foreach (ManagementObject oManObject in Q)
{
// Console.WriteLine(oManObject["MailExchange"].ToString());
return true;
}
return false;
}
catch (Exception e)
{
errMessage = e.Message;
Console.WriteLine(e.ToString());
return false;
}
}
/// <summary>
/// 創(chuàng)建MicrosoftDNS_CNAMEType記錄(別名)
/// </summary>
/// <param name="HostName">主機(jī)名 [如果為空或NULL,主機(jī)名將與域名保持一致.]</param>
/// <param name="ContainerName">主域 Name of the Container for the Zone, Cache, or RootHints instance that contains this RR.</param>
/// <param name="PrimaryName">in] Primary name of the CNAME RR</param>
/// <param name="TTL">Time, in seconds, that the RR can be cached by a DNS resolver</param>
/// <returns></returns>
public bool CreateCNAMEType(string HostName, string ContainerName, string PrimaryName, string TTL)
{
try
{
string OwnerName = null;
if (string.IsNullOrEmpty(HostName))
{
OwnerName = ContainerName;
}
else
{
OwnerName = HostName + "." + ContainerName;
}
this.Create("MicrosoftDNS_CNAMEType");
//如果區(qū)域不存在
if (!IsExistsZone(ContainerName))
{
Console.WriteLine("區(qū)域:{0}不存在,創(chuàng)建失敗", ContainerName);
errMessage = string.Format("區(qū)域:{0}不存在,創(chuàng)建失敗", ContainerName);
return false;
}
if (IsExistsCNAMEType(ContainerName, OwnerName))
{
Console.WriteLine("{0}中已存在{1},創(chuàng)建失敗", ContainerName, OwnerName);
errMessage = string.Format("{0}中已存在{1},創(chuàng)建失敗", ContainerName, OwnerName);
return false;
}
MI = DnsClass.GetMethodParameters("CreateInstanceFromPropertyData");
MI["DnsServerName"] = "localhost";
MI["ContainerName"] = ContainerName;
// MI["RecordClass"] = 1; //Default value is 1. //1 IN (Internet) //2 CS (CSNET) //3 CH (CHAOS) //4 HS (Hesiod)
MI["PrimaryName"] = PrimaryName;
MI["OwnerName"] = OwnerName;
if (string.IsNullOrEmpty(TTL))
{
TTL = "3600";
}
MI["TTL"] = TTL;
DnsClass.InvokeMethod("CreateInstanceFromPropertyData", MI, null);
errMessage = "CNAME:" + OwnerName + "創(chuàng)建成功.";
return true;
}
catch (Exception e)
{
errMessage = e.Message;
Console.WriteLine(e.ToString());
return false;
}
}
/// <summary>
/// 修改MicrosoftDNS_CNAMEType記錄(別名)
/// </summary>
/// <param name="HostName">主機(jī)名 [如果為空或NULL,主機(jī)名將與域名保持一致.]</param>
/// <param name="ContainerName">主域名 主域 Name of the Container for the Zone, Cache, or RootHints instance that contains this RR.</param>
/// <param name="TTL">[in, optional] Time, in seconds, that the RR can be cached by a DNS resolver. </param>
/// <param name="PrimaryName">in] Primary name of the CNAME RR</param>
/// <returns></returns>
public bool ModifyCNAMEType(string HostName, string ContainerName, string TTL, string PrimaryName)
{
try
{
string OwnerName = null;
if (string.IsNullOrEmpty(HostName))
{
OwnerName = ContainerName;
}
else
{
OwnerName = HostName + "." + ContainerName;
}
this.Create("MicrosoftDNS_CNAMEType");
//如果區(qū)域不存在
if (!IsExistsZone(ContainerName))
{
Console.WriteLine("區(qū)域:{0}不存在,修改失敗", ContainerName);
errMessage = string.Format("區(qū)域:{0}不存在,修改失敗", ContainerName);
return false;
}
if (!IsExistsCNAMEType(ContainerName, OwnerName))
{
Console.WriteLine("{0}中不存在{1},修改失敗", ContainerName, OwnerName);
errMessage = string.Format("{0}中不存在{1},修改失敗", ContainerName, OwnerName);
return false;
}
Q = QueryDNS("Select * From MicrosoftDNS_CNAMEType Where ContainerName='" + ContainerName + "' and OwnerName='" + OwnerName + "'");
foreach (ManagementObject oManObject in Q)
{
if (ClearEndDot(oManObject["PrimaryName"].ToString()) == ClearEndDot(PrimaryName))
{
errMessage = "CName記錄:" + OwnerName + "修改失敗,必須修改別名主機(jī).";
return false;
}
MI = oManObject.GetMethodParameters("Modify");
if (string.IsNullOrEmpty(TTL))
{
TTL = "3600";
}
MI["TTL"] = TTL;
MI["PrimaryName"] = PrimaryName;
oManObject.InvokeMethod("Modify", MI, null);
errMessage = "CNAME:" + OwnerName + "修改成功.";
return true;
}
return false;
}
catch (Exception e)
{
errMessage = e.Message;
Console.WriteLine(e.ToString());
return false;
}
}
/// <summary>
/// 刪除MicrosoftDNS_CNAMEType
/// </summary>
/// <param name="HostName">主機(jī)名 [如果為空或NULL,主機(jī)名將與域名保持一致.]</param>
/// <param name="ContainerName">主域名 主域 Name of the Container for the Zone, Cache, or RootHints instance that contains this RR.</param>
/// <returns></returns>
public bool DelCNAMEType(string HostName, string ContainerName)
{
try
{
string OwnerName = null;
if (string.IsNullOrEmpty(HostName))
{
OwnerName = ContainerName;
}
else
{
OwnerName = HostName + "." + ContainerName;
}
this.Create("MicrosoftDNS_CNAMEType");
//如果區(qū)域不存在
if (!IsExistsZone(ContainerName))
{
Console.WriteLine("區(qū)域:{0}不存在,刪除失敗", ContainerName);
errMessage = string.Format("區(qū)域:{0}不存在,刪除失敗", ContainerName);
return false;
}
if (!IsExistsCNAMEType(ContainerName, OwnerName))
{
Console.WriteLine("{0}中不存在{1},刪除失敗", ContainerName, OwnerName);
errMessage = string.Format("{0}中不存在{1},刪除失敗", ContainerName, OwnerName);
return false;
}
Q = QueryDNS("Select * From MicrosoftDNS_CNAMEType Where ContainerName='" + ContainerName + "' and OwnerName='" + OwnerName + "'");
foreach (ManagementObject oManObject in Q)
{
oManObject.Delete();
errMessage = "CNAME:" + OwnerName + "刪除成功.";
return true;
}
return false;
}
catch (Exception e)
{
errMessage = e.Message;
Console.WriteLine(e.ToString());
return false;
}
}
/// <summary>
/// 去除以.結(jié)尾的字符串的.
/// </summary>
/// <param name="str"></param>
/// <returns></returns>
private string ClearEndDot(string str)
{
string returnStr = str;
if (!string.IsNullOrEmpty(str))
{
int l = str.LastIndexOf(".");
if (l != -1 && l == str.Length - 1)
{
returnStr = str.Substring(0, str.Length - 1);
}
}
return returnStr;
}
}
}
using System.Collections.Generic;
using System.Text;
using System.Data;
namespace Yaosansi
{
class Test
{
static void Main()
{
MyDnsTEST();
}
/// <summary>
/// MyDnsTEST功能測(cè)試
/// C#利用WMI操作DNS服務(wù)器(可遠(yuǎn)程操作,需要相應(yīng)權(quán)限)
/// Author:yaosansi
/// Create Date:2005-09-07
/// Modify Date:2006-10-25
/// Site:http://www.yaosansi.com/
/// E-mail:yaosansi at 126 dot com
/// http://www.yaosansi.com/blog/article.asp?id=935
/// http://yaosansi.cnblogs.com/archive/2006/11/04/DNSServiceInCsharpWithWMI.html
/// 注意:此版本為WINDOWS2003 DNS服務(wù)器專(zhuān)用.不適合其它版本操作系統(tǒng).
/// </summary>
static void MyDnsTEST()
{
Yaosansi.Net.MYDNS dns = new Yaosansi.Net.MYDNS();
//===========================================
//不對(duì)以下三個(gè)屬性賦值默認(rèn)DNS服務(wù)器為本機(jī).
dns.ServerName = "202.96.64.68";
dns.userName = "Administrator";
dns.passWord = "123456789";
//===========================================
//dns.CreateZone("yaosansi.com");
//dns.DelZone("yaosansi.com");
//dns.CreateAType("yaosansi.com", "www", "2.2.2.2", "3600");
//dns.ModifyAType("yaosansi.com","www","127.21.0.1","800");
//dns.DelAType("yaosansi.com", "mail");
//dns.CreateMXType("mail", "yaosansi.com", "5.5.5.5", "20", "3600");
//dns.ModifyMXType("mail", "yaosansi.com", "36000", "218.1.1.1", "26");
//dns.DelMXType("mail", "yaosansi.com");
//dns.CreateCNAMEType("mpq2", "yaosansi.com", "www.yaosansi.com", "3900");
//dns.ModifyCNAMEType("mpq2", "abc.com", "30520", "www.yaosansi.com.");
//dns.DelCNAMEType("mpq", "yaosansi.com");
//DataTable table = dns.ListExistsMXType("yaosansi.com");
DataTable table = dns.ListExistsAType("yaosansi.com");
//DataTable table = dns.ListExistsCNAMEType("yaosansi.com");
Yaosansi.Data.DataHelp.PrintTable(table);
if (!string.IsNullOrEmpty(dns.ErrMessage))
{
Console.WriteLine("--------------------------------------------------");
Console.WriteLine("返回信息:" + dns.ErrMessage);
Console.WriteLine("--------------------------------------------------");
}
Console.WriteLine("");
Console.WriteLine("===End===");
Console.ReadLine();
}
}
}
using System;
using System.Management;
using System.Data;
namespace Yaosansi.Net
{
/// <summary>
/// C#利用WMI操作DNS服務(wù)器(可遠(yuǎn)程操作,需要相應(yīng)權(quán)限)
/// Author:yaosansi
/// Create Date:2005-09-07
/// Modify Date:2006-10-25
/// Site:http://www.yaosansi.com/
/// E-mail:yaosansi at 126 dot com
/// http://www.yaosansi.com/blog/article.asp?id=935
/// http://yaosansi.cnblogs.com/archive/2006/11/04/DNSServiceInCsharpWithWMI.html
/// 注意:此版本為WINDOWS2003 DNS服務(wù)器專(zhuān)用.不適合其它版本操作系統(tǒng).
/// </summary>
public class MYDNS
{
//要連接的DNS服務(wù)器
private string sServerPath;
//用戶(hù)名
private string username = null;
//密碼
private string password = null;
//服務(wù)器名稱(chēng)或IP地址
private string DNSName = null;
//表示管理操作的范圍.這里是用來(lái)執(zhí)行DNS的命名空間
private ManagementScope DNS;
//用于返回檢索的ManagementObject集合
private System.Management.ManagementObjectCollection Q;
//
private ManagementClass DnsClass;
//
private ManagementBaseObject MI;
/// <summary>
/// 返回的操作信息.
/// </summary>
private string errMessage=null;
/// <summary>
/// 獲取錯(cuò)誤信息.
/// </summary>
public string ErrMessage
{
get
{
return errMessage;
}
}
/// <summary>
/// 設(shè)置DNS服務(wù)器名稱(chēng)或IP地址
/// </summary>
public string ServerName
{
set
{
this.sServerPath = string.Format(@"\\{0}\root\MicrosoftDNS", value);
this.DNSName = value;
}
}
/// <summary>
/// 設(shè)置連接服務(wù)器的用戶(hù)名(指定服務(wù)器IP,用戶(hù)和密碼后將自動(dòng)連接遠(yuǎn)程服務(wù)器,本機(jī)不需要指定)
/// </summary>
public string userName
{
set
{
this.username = value;
}
}
/// <summary>
/// 設(shè)置連接服務(wù)器的密碼(指定服務(wù)器IP,用戶(hù)和密碼后將自動(dòng)連接遠(yuǎn)程服務(wù)器,本機(jī)不需要指定)
/// </summary>
public string passWord
{
set
{
this.password = value;
}
}
/// <summary>
/// 構(gòu)造函數(shù)
/// </summary>
public MYDNS()
{
sServerPath = @"\\localhost\root\MicrosoftDNS";
DNSName = "localhost";
}
/// <summary>
/// 建立對(duì)象.連接
/// </summary>
/// <param name="DnsType">DNS類(lèi)型 MicrosoftDNS_Zone等</param>
private void Create(string DnsType)
{
if (!string.IsNullOrEmpty(username) && !string.IsNullOrEmpty(password))
{
System.Management.ConnectionOptions Conn = new ConnectionOptions();
Conn.Username = username; //用戶(hù)名
Conn.Password = password; //口令
DNS = new ManagementScope(sServerPath,Conn);
}
else
{
DNS = new ManagementScope(sServerPath);
}
if (!DNS.IsConnected)
{
DNS.Connect();
}
ManagementPath Path = new ManagementPath(DnsType);
this.DnsClass = new ManagementClass(DNS, Path, null);
}
/// <summary>
/// 查詢(xún)DNS并建立對(duì)象
/// </summary>
/// <param name="query">WQL查詢(xún)語(yǔ)句</param>
/// <param name="DnsType">DNS類(lèi)型 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>
/// 僅查詢(xún)DNS
/// </summary>
/// <param name="query">WQL查詢(xún)語(yǔ)句</param>
/// <returns></returns>
public ManagementObjectCollection QueryDNS(string query)
{
if (!string.IsNullOrEmpty(username) && !string.IsNullOrEmpty(password))
{
System.Management.ConnectionOptions Conn = new ConnectionOptions();
Conn.Username = username; //用戶(hù)名
Conn.Password = password; //口令
DNS = new ManagementScope(sServerPath, Conn);
}
else
{
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>
/// 判斷區(qū)域是否存在
/// </summary>
/// <param name="domain">區(qū)域名稱(chēng)</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 (Exception e)
{
errMessage = e.Message;
Console.WriteLine(e.ToString());
return false;
}
}
/// <summary>
/// 創(chuàng)建一個(gè)新的區(qū)域,僅區(qū)域名稱(chēng)
/// </summary>
/// <param name="domain">區(qū)域的名稱(chēng)</param>
public bool CreateZone(string domain)
{
try
{
this.Create("MicrosoftDNS_Zone");
//如果區(qū)域已經(jīng)存在
if (IsExistsZone(domain))
{
errMessage = "域:"+domain+"已經(jīng)存在.";
return false;
}
//建立新的區(qū)域
this.MI = DnsClass.GetMethodParameters("CreateZone");
this.MI["ZoneName"] = domain;
this.MI["ZoneType"] = 0;
ManagementBaseObject OutParams = this.DnsClass.InvokeMethod("CreateZone", MI, null);
errMessage = "域:"+domain+"創(chuàng)建成功.";
return true;
}
catch (Exception e)
{
errMessage = e.Message;
Console.WriteLine(e.ToString());
return false;
}
}
/// <summary>
/// 創(chuàng)建一個(gè)區(qū)域,包括其它參數(shù)
/// </summary>
/// <param name="domain">要?jiǎng)?chuàng)建的區(qū)域名稱(chēng)</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");
//如果區(qū)域已經(jīng)存在
if (IsExistsZone(domain))
{
errMessage = "域:" + domain + "已經(jīng)存在.";
return false;
}
//建立新的區(qū)域
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);
errMessage = "域:" + domain + "創(chuàng)建成功.";
return true;
}
catch (Exception e)
{
errMessage = e.Message;
Console.WriteLine(e.ToString());
return false;
}
}
/// <summary>
/// 修改區(qū)域
/// </summary>
/// <param name="domain">要修改的區(qū)域名稱(chēng)</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);
errMessage = "域:" + domain + "修改成功.";
return true;
}
errMessage = "未找到域:"+domain;
return false;
}
catch (Exception e)
{
errMessage = e.Message;
Console.WriteLine(e.ToString());
return false;
}
}
/// <summary>
/// 刪除區(qū)域
/// </summary>
/// <param name="domain">要冊(cè)除的區(qū)域的名稱(chēng)</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();
errMessage = "域:" + domain + "刪除成功.";
return true;
}
errMessage = "未找到域:" + domain;
return false;
}
catch (Exception e)
{
errMessage = e.Message;
Console.WriteLine(e.ToString());
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 (Exception e)
{
errMessage = e.Message;
Console.WriteLine(e.ToString());
return false;
}
}
/// <summary>
/// 創(chuàng)建MicrosoftDNS_AType
/// </summary>
/// <param name="ContainerName">Name of the Container for the Zone, Cache, or RootHints instance which contains this RR</param>
/// <param name="HostName">主機(jī)名 [如果為空或NULL,主機(jī)名將與域名保持一致.]</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 HostName, string IPAddress,string TTL)
{
try
{
string OwnerName = null;
if (string.IsNullOrEmpty(HostName))
{
OwnerName = ContainerName;
}
else
{
OwnerName = HostName + "." + ContainerName;
}
this.Create("MicrosoftDNS_AType");
//如果區(qū)域不存在
if (!IsExistsZone(ContainerName))
{
Console.WriteLine("區(qū)域:{0}不存在,創(chuàng)建失敗", ContainerName);
errMessage = string.Format("區(qū)域:{0}不存在,創(chuàng)建失敗", ContainerName);
return false;
}
if (IsExistsAType(ContainerName, OwnerName))
{
Console.WriteLine("{0}中已存在{1},創(chuàng)建失敗", ContainerName, OwnerName);
errMessage = string.Format("{0}中已存在{1},創(chuàng)建失敗", ContainerName, OwnerName);
return false;
}
MI = DnsClass.GetMethodParameters("CreateInstanceFromPropertyData");
MI["DnsServerName"] = "localhost";
MI["ContainerName"] = ContainerName;
MI["OwnerName"] = OwnerName;
MI["IPAddress"] = IPAddress;
if (string.IsNullOrEmpty(TTL))
{
TTL = "3600";
}
MI["TTL"] =TTL;
DnsClass.InvokeMethod("CreateInstanceFromPropertyData", MI, null);
errMessage = "A記錄:" + OwnerName + "創(chuàng)建成功.";
return true;
}
catch (Exception e)
{
errMessage = e.Message;
Console.WriteLine(e.ToString());
return false;
}
}
/// <summary>
/// 創(chuàng)建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="HostName">主機(jī)名 [如果為空或NULL,主機(jī)名將與域名保持一致.]</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 HostName, uint RecordClass, uint TTL, string IPAddress)
{
try
{
string OwnerName = null;
if (string.IsNullOrEmpty(HostName))
{
OwnerName = ContainerName;
}
else
{
OwnerName = HostName + "." + ContainerName;
}
this.Create("MicrosoftDNS_AType");
//如果區(qū)域不存在
if (!IsExistsZone(ContainerName))
{
Console.WriteLine("區(qū)域:{0}不存在,創(chuàng)建失敗", ContainerName);
errMessage = string.Format("區(qū)域:{0}不存在,創(chuàng)建失敗", ContainerName);
return false;
}
if (IsExistsAType(ContainerName, OwnerName))
{
Console.WriteLine("{0}中已存在{1},創(chuàng)建失敗", ContainerName, OwnerName);
errMessage=string.Format("{0}中已存在{1},創(chuàng)建失敗", 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);
errMessage = "A記錄:" + OwnerName + "創(chuàng)建成功.";
return true;
}
catch (Exception e)
{
errMessage = e.Message;
Console.WriteLine(e.ToString());
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="HostName">主機(jī)名 [如果為空或NULL,主機(jī)名將與域名保持一致.]</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 HostName, string IPAddress,string TTL)
{
try
{
string OwnerName = null;
if (string.IsNullOrEmpty(HostName))
{
OwnerName = ContainerName;
}
else
{
OwnerName = HostName + "." + ContainerName;
}
//如果區(qū)域不存在
if (!IsExistsZone(ContainerName))
{
Console.WriteLine("區(qū)域:{0}不存在,修改失敗", ContainerName);
errMessage = string.Format("區(qū)域:{0}不存在,修改失敗", ContainerName);
return false;
}
if (!IsExistsAType(ContainerName, OwnerName))
{
Console.WriteLine("{0}中不存在{1},修改失敗", ContainerName, OwnerName);
errMessage = string.Format("{0}中不存在{1},修改失敗", ContainerName, OwnerName);
return false;
}
Q = QueryDNS("Select * From MicrosoftDNS_AType where ContainerName='" + ContainerName + "' and OwnerName='" + OwnerName + "'", "MicrosoftDNS_AType");
foreach (ManagementObject oManObject in Q)
{
//foreach (PropertyData p in oManObject.Properties)
//{
// try
// { Console.WriteLine(p.Name+"="+oManObject[p.Name]); }
// catch
// { }
//}
if (oManObject["IPAddress"].ToString() == IPAddress)
{
errMessage = "A記錄:" + OwnerName + "修改失敗,必須修改IP地址.";
return false;
}
MI = oManObject.GetMethodParameters("Modify");
MI["IPAddress"] = IPAddress;
MI["TTL"] = TTL;
oManObject.InvokeMethod("Modify", MI, null);
errMessage = "A記錄:" + OwnerName + "修改成功.";
return true;
}
errMessage = string.Format("{0}中不存在{1},修改失敗", ContainerName, OwnerName);
return false;
}
catch (Exception e)
{
errMessage = e.Message;
Console.WriteLine(e.ToString());
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="HostName">主機(jī)名 [如果為空或NULL,主機(jī)名將與域名保持一致.]</param>
/// <returns></returns>
public bool DelAType(string ContainerName, string HostName)
{
try
{
string OwnerName = null;
if (string.IsNullOrEmpty(HostName))
{
OwnerName = ContainerName;
}
else
{
OwnerName = HostName + "." + ContainerName;
}
//如果區(qū)域不存在
if (!IsExistsZone(ContainerName))
{
Console.WriteLine("區(qū)域:{0}不存在,刪除失敗", ContainerName);
errMessage = string.Format("區(qū)域:{0}不存在,刪除失敗", ContainerName);
return false;
}
if (!IsExistsAType(ContainerName, OwnerName))
{
Console.WriteLine("{0}中不存在{1},刪除失敗", ContainerName, OwnerName);
errMessage = string.Format("{0}中不存在{1},刪除失敗", ContainerName, OwnerName);
return false;
}
Q = QueryDNS("Select * From MicrosoftDNS_AType where ContainerName='" + ContainerName + "' and OwnerName='" + OwnerName + "'", "MicrosoftDNS_AType");
foreach (ManagementObject oManObject in Q)
{
oManObject.Delete();
errMessage = "A記錄:" + OwnerName + "刪除成功.";
return true;
}
errMessage = string.Format("{0}中不存在{1},刪除失敗", ContainerName, OwnerName);
return false;
}
catch (Exception e)
{
errMessage = e.Message;
Console.WriteLine(e.ToString());
return false;
}
}
/// <summary>
/// 列出某域名下的所有A記錄.
/// </summary>
/// <param name="ContainerName">Name of the Container for the Zone, Cache, or RootHints instance which contains this RR</param>
/// <returns></returns>
public DataTable ListExistsAType(string ContainerName)
{
Yaosansi.IO.Log log = new Yaosansi.IO.Log();
log.WirteLogTime();
log.WirteLog(ContainerName);
DataTable table = new DataTable("MicrosoftDNS_AType" + ContainerName);
table.Columns.Add("主機(jī)名 (A)");
table.Columns.Add("IP 地址");
table.Columns.Add("TTL");
try
{
Q = QueryDNS("Select * From MicrosoftDNS_AType where ContainerName='" + ContainerName + "'");
foreach (ManagementObject oManObject in Q)
{
try
{
DataRow row = table.NewRow();
row["主機(jī)名 (A)"] = oManObject["OwnerName"];
row["IP 地址"] = oManObject["IPAddress"];
row["TTL"] = oManObject["TTL"];
table.Rows.Add(row);
}
catch (Exception e) { log.WirteLog(e.ToString()); }
}
}
catch (Exception e)
{
errMessage = e.Message;
Console.WriteLine(e.ToString());
log.WirteLog(e.ToString());
}
Yaosansi.Data.DataHelp.PrintTableLog(table);
return table;
}
/// <summary>
/// 列出某域名下的所有MX記錄.
/// </summary>
/// <param name="ContainerName">Name of the Container for the Zone, Cache, or RootHints instance which contains this RR</param>
/// <returns></returns>
public DataTable ListExistsMXType(string ContainerName)
{
DataTable table = new DataTable("MicrosoftDNS_MXType" + ContainerName);
table.Columns.Add("郵件交換記錄 (MX)");
table.Columns.Add("目標(biāo)主機(jī)");
table.Columns.Add("優(yōu)先級(jí)");
table.Columns.Add("TTL");
try
{
Q = QueryDNS("Select * From MicrosoftDNS_MXType where ContainerName='" + ContainerName + "'");
foreach (ManagementObject oManObject in Q)
{
try
{
DataRow row = table.NewRow();
row["目標(biāo)主機(jī)"] = oManObject["MailExchange"];
row["郵件交換記錄 (MX)"] = oManObject["OwnerName"];
row["優(yōu)先級(jí)"] = oManObject["Preference"];
row["TTL"] = oManObject["TTL"];
table.Rows.Add(row);
}
catch { }
}
}
catch (Exception e)
{
errMessage = e.Message;
Console.WriteLine(e.ToString());
}
return table;
}
/// <summary>
/// 列出某域名下的所有別名.
/// </summary>
/// <param name="ContainerName">Name of the Container for the Zone, Cache, or RootHints instance which contains this RR</param>
/// <returns></returns>
public DataTable ListExistsCNAMEType(string ContainerName)
{
DataTable table = new DataTable("MicrosoftDNS_CNAMEType" + ContainerName);
table.Columns.Add("別名 (CNAME)");
table.Columns.Add("別名主機(jī)");
table.Columns.Add("TTL");
try
{
Q = QueryDNS("Select * From MicrosoftDNS_CNAMEType where ContainerName='" + ContainerName + "'");
foreach (ManagementObject oManObject in Q)
{
try
{
DataRow row = table.NewRow();
row["別名 (CNAME)"] = oManObject["OwnerName"];
row["別名主機(jī)"] = oManObject["PrimaryName"];
row["TTL"] = oManObject["TTL"];
table.Rows.Add(row);
}
catch { }
}
}
catch (Exception e)
{
errMessage = e.Message;
Console.WriteLine(e.ToString());
}
return table;
}
/// <summary>
/// 判斷在某MicrosoftDNS_MXType是否在指定的域中存在
/// </summary>
/// <param name="ContainerName">主域名 主域 Name of the Container for the Zone, Cache, or RootHints instance that contains this RR.</param>
/// <param name="OwnerName">Owner name for the RR. </param>
/// <returns></returns>
public bool IsExistsMXType(string ContainerName, string OwnerName)
{
try
{
Q = QueryDNS("Select * From MicrosoftDNS_MXType Where ContainerName='" + ContainerName + "' and OwnerName='" + OwnerName + "'");
foreach (ManagementObject oManObject in Q)
{
// Console.WriteLine(oManObject["MailExchange"].ToString());
return true;
}
return false;
}
catch (Exception e)
{
errMessage = e.Message;
Console.WriteLine(e.ToString());
return false;
}
}
/// <summary>
/// 創(chuàng)建MicrosoftDNS_MXType記錄(郵件交換記錄)
/// </summary>
/// <param name="HostName">主機(jī)名 [如果為空或NULL,主機(jī)名將與域名保持一致.]</param>
/// <param name="ContainerName">主域 Name of the Container for the Zone, Cache, or RootHints instance that contains this RR.</param>
/// <param name="MailExchange">目標(biāo)主機(jī) FQDN specifying a host willing to act as a mail exchange for the owner name</param>
/// <param name="Preference">優(yōu)先級(jí) Preference given to this RR among others at the same owner. Lower values are preferred</param>
/// <param name="TTL">Time, in seconds, that the RR can be cached by a DNS resolver</param>
/// <returns></returns>
public bool CreateMXType(string HostName, string ContainerName,string MailExchange, string Preference, string TTL)
{
try
{
string OwnerName = null;
if (string.IsNullOrEmpty(HostName))
{
OwnerName = ContainerName;
}
else
{
OwnerName = HostName + "." + ContainerName;
}
this.Create("MicrosoftDNS_MXType");
//如果區(qū)域不存在
if (!IsExistsZone(ContainerName))
{
Console.WriteLine("區(qū)域:{0}不存在,創(chuàng)建失敗", ContainerName);
errMessage = string.Format("區(qū)域:{0}不存在,創(chuàng)建失敗", ContainerName);
return false;
}
if (IsExistsMXType(ContainerName,OwnerName))
{
Console.WriteLine("{0}中已存在{1},創(chuàng)建失敗", ContainerName,OwnerName );
errMessage = string.Format("{0}中已存在{1},創(chuàng)建失敗", ContainerName, OwnerName);
return false;
}
MI = DnsClass.GetMethodParameters("CreateInstanceFromPropertyData");
MI["DnsServerName"] = "localhost";
MI["ContainerName"] = ContainerName;
// MI["RecordClass"] = 1; //Default value is 1. //1 IN (Internet) //2 CS (CSNET) //3 CH (CHAOS) //4 HS (Hesiod)
MI["MailExchange"] = MailExchange;
MI["OwnerName"] = OwnerName;
MI["Preference"] = Preference;
if (string.IsNullOrEmpty(TTL))
{
TTL = "3600";
}
MI["TTL"] = TTL;
DnsClass.InvokeMethod("CreateInstanceFromPropertyData", MI, null);
errMessage = "MX記錄:" + OwnerName + "創(chuàng)建成功.";
return true;
}
catch (Exception e)
{
errMessage = e.Message;
Console.WriteLine(e.ToString());
return false;
}
}
/// <summary>
/// 修改MicrosoftDNS_MXType記錄(修改郵件交換記錄)
/// </summary>
/// <param name="HostName">主機(jī)名 [如果為空或NULL,主機(jī)名將與域名保持一致.]</param>
/// <param name="ContainerName">主域名 主域 Name of the Container for the Zone, Cache, or RootHints instance that contains this RR.</param>
/// <param name="TTL">[in, optional] Time, in seconds, that the RR can be cached by a DNS resolver. </param>
/// <param name="MailExchange">[in, optional] FQDN specifying a host willing to act as a mail exchange for the owner name. </param>
/// <param name="Preference">郵件優(yōu)先級(jí) [in, optional] Preference given to this RR among others at the same owner. Lower values are preferred. </param>
/// <returns></returns>
public bool ModifyMXType(string HostName, string ContainerName, string TTL, string MailExchange,string Preference)
{
try
{
string OwnerName = null;
if (string.IsNullOrEmpty(HostName))
{
OwnerName = ContainerName;
}
else
{
OwnerName = HostName + "." + ContainerName;
}
this.Create("MicrosoftDNS_MXType");
//如果區(qū)域不存在
if (!IsExistsZone(ContainerName))
{
Console.WriteLine("區(qū)域:{0}不存在,修改失敗", ContainerName);
errMessage = string.Format("區(qū)域:{0}不存在,修改失敗", ContainerName);
return false;
}
if (!IsExistsMXType(ContainerName, OwnerName))
{
Console.WriteLine("{0}中不存在{1},修改失敗", ContainerName, OwnerName);
errMessage = string.Format("{0}中不存在{1},修改失敗", ContainerName, OwnerName);
return false;
}
Q = QueryDNS("Select * From MicrosoftDNS_MXType Where ContainerName='" + ContainerName + "' and OwnerName='" + OwnerName + "'");
foreach (ManagementObject oManObject in Q)
{
MI = oManObject.GetMethodParameters("Modify");
if (string.IsNullOrEmpty(TTL))
{
TTL = "3600";
}
if (ClearEndDot(oManObject["MailExchange"].ToString()) == ClearEndDot(MailExchange) && oManObject["Preference"].ToString() == Preference)
{
errMessage = "MX記錄:" + OwnerName + "修改失敗,必須修改目標(biāo)主機(jī)或郵件優(yōu)先級(jí).";
return false;
}
MI["TTL"] = TTL;
MI["MailExchange"] = MailExchange;
MI["Preference"] = Preference;
oManObject.InvokeMethod("Modify", MI, null);
errMessage = "MX記錄:" + OwnerName + "修改成功.";
return true;
}
return false;
}
catch (Exception e)
{
errMessage = e.Message;
Console.WriteLine(e.ToString());
return false;
}
}
/// <summary>
/// 刪除MicrosoftDNS_MXType
/// </summary>
/// <param name="HostName">主機(jī)名 [如果為空或NULL,主機(jī)名將與域名保持一致.]</param>
/// <param name="ContainerName">主域名 主域 Name of the Container for the Zone, Cache, or RootHints instance that contains this RR.</param>
/// <returns></returns>
public bool DelMXType(string HostName, string ContainerName)
{
try
{
string OwnerName = null;
if (string.IsNullOrEmpty(HostName))
{
OwnerName = ContainerName;
}
else
{
OwnerName = HostName + "." + ContainerName;
}
this.Create("MicrosoftDNS_MXType");
//如果區(qū)域不存在
if (!IsExistsZone(ContainerName))
{
Console.WriteLine("區(qū)域:{0}不存在,刪除失敗", ContainerName);
errMessage = string.Format("區(qū)域:{0}不存在,刪除失敗", ContainerName);
return false;
}
if (!IsExistsMXType(ContainerName, OwnerName))
{
Console.WriteLine("{0}中不存在{1},刪除失敗", ContainerName, OwnerName);
errMessage = string.Format("{0}中不存在{1},刪除失敗", ContainerName, OwnerName);
return false;
}
Q = QueryDNS("Select * From MicrosoftDNS_MXType Where ContainerName='" + ContainerName + "' and OwnerName='" + OwnerName + "'");
foreach (ManagementObject oManObject in Q)
{
oManObject.Delete();
errMessage = "MX記錄:" + OwnerName + "刪除成功.";
return true;
}
return false;
}
catch (Exception e)
{
errMessage = e.Message;
Console.WriteLine(e.ToString());
return false;
}
}
/// <summary>
/// 判斷在某MicrosoftDNS_CNAMEType是否在指定的域中存在
/// </summary>
/// <param name="ContainerName">主域名 主域 Name of the Container for the Zone, Cache, or RootHints instance that contains this RR.</param>
/// <param name="OwnerName">Owner name for the RR. </param>
/// <returns></returns>
public bool IsExistsCNAMEType(string ContainerName, string OwnerName)
{
try
{
Q = QueryDNS("Select * From MicrosoftDNS_CNAMEType Where ContainerName='" + ContainerName + "' and OwnerName='" + OwnerName + "'");
foreach (ManagementObject oManObject in Q)
{
// Console.WriteLine(oManObject["MailExchange"].ToString());
return true;
}
return false;
}
catch (Exception e)
{
errMessage = e.Message;
Console.WriteLine(e.ToString());
return false;
}
}
/// <summary>
/// 創(chuàng)建MicrosoftDNS_CNAMEType記錄(別名)
/// </summary>
/// <param name="HostName">主機(jī)名 [如果為空或NULL,主機(jī)名將與域名保持一致.]</param>
/// <param name="ContainerName">主域 Name of the Container for the Zone, Cache, or RootHints instance that contains this RR.</param>
/// <param name="PrimaryName">in] Primary name of the CNAME RR</param>
/// <param name="TTL">Time, in seconds, that the RR can be cached by a DNS resolver</param>
/// <returns></returns>
public bool CreateCNAMEType(string HostName, string ContainerName, string PrimaryName, string TTL)
{
try
{
string OwnerName = null;
if (string.IsNullOrEmpty(HostName))
{
OwnerName = ContainerName;
}
else
{
OwnerName = HostName + "." + ContainerName;
}
this.Create("MicrosoftDNS_CNAMEType");
//如果區(qū)域不存在
if (!IsExistsZone(ContainerName))
{
Console.WriteLine("區(qū)域:{0}不存在,創(chuàng)建失敗", ContainerName);
errMessage = string.Format("區(qū)域:{0}不存在,創(chuàng)建失敗", ContainerName);
return false;
}
if (IsExistsCNAMEType(ContainerName, OwnerName))
{
Console.WriteLine("{0}中已存在{1},創(chuàng)建失敗", ContainerName, OwnerName);
errMessage = string.Format("{0}中已存在{1},創(chuàng)建失敗", ContainerName, OwnerName);
return false;
}
MI = DnsClass.GetMethodParameters("CreateInstanceFromPropertyData");
MI["DnsServerName"] = "localhost";
MI["ContainerName"] = ContainerName;
// MI["RecordClass"] = 1; //Default value is 1. //1 IN (Internet) //2 CS (CSNET) //3 CH (CHAOS) //4 HS (Hesiod)
MI["PrimaryName"] = PrimaryName;
MI["OwnerName"] = OwnerName;
if (string.IsNullOrEmpty(TTL))
{
TTL = "3600";
}
MI["TTL"] = TTL;
DnsClass.InvokeMethod("CreateInstanceFromPropertyData", MI, null);
errMessage = "CNAME:" + OwnerName + "創(chuàng)建成功.";
return true;
}
catch (Exception e)
{
errMessage = e.Message;
Console.WriteLine(e.ToString());
return false;
}
}
/// <summary>
/// 修改MicrosoftDNS_CNAMEType記錄(別名)
/// </summary>
/// <param name="HostName">主機(jī)名 [如果為空或NULL,主機(jī)名將與域名保持一致.]</param>
/// <param name="ContainerName">主域名 主域 Name of the Container for the Zone, Cache, or RootHints instance that contains this RR.</param>
/// <param name="TTL">[in, optional] Time, in seconds, that the RR can be cached by a DNS resolver. </param>
/// <param name="PrimaryName">in] Primary name of the CNAME RR</param>
/// <returns></returns>
public bool ModifyCNAMEType(string HostName, string ContainerName, string TTL, string PrimaryName)
{
try
{
string OwnerName = null;
if (string.IsNullOrEmpty(HostName))
{
OwnerName = ContainerName;
}
else
{
OwnerName = HostName + "." + ContainerName;
}
this.Create("MicrosoftDNS_CNAMEType");
//如果區(qū)域不存在
if (!IsExistsZone(ContainerName))
{
Console.WriteLine("區(qū)域:{0}不存在,修改失敗", ContainerName);
errMessage = string.Format("區(qū)域:{0}不存在,修改失敗", ContainerName);
return false;
}
if (!IsExistsCNAMEType(ContainerName, OwnerName))
{
Console.WriteLine("{0}中不存在{1},修改失敗", ContainerName, OwnerName);
errMessage = string.Format("{0}中不存在{1},修改失敗", ContainerName, OwnerName);
return false;
}
Q = QueryDNS("Select * From MicrosoftDNS_CNAMEType Where ContainerName='" + ContainerName + "' and OwnerName='" + OwnerName + "'");
foreach (ManagementObject oManObject in Q)
{
if (ClearEndDot(oManObject["PrimaryName"].ToString()) == ClearEndDot(PrimaryName))
{
errMessage = "CName記錄:" + OwnerName + "修改失敗,必須修改別名主機(jī).";
return false;
}
MI = oManObject.GetMethodParameters("Modify");
if (string.IsNullOrEmpty(TTL))
{
TTL = "3600";
}
MI["TTL"] = TTL;
MI["PrimaryName"] = PrimaryName;
oManObject.InvokeMethod("Modify", MI, null);
errMessage = "CNAME:" + OwnerName + "修改成功.";
return true;
}
return false;
}
catch (Exception e)
{
errMessage = e.Message;
Console.WriteLine(e.ToString());
return false;
}
}
/// <summary>
/// 刪除MicrosoftDNS_CNAMEType
/// </summary>
/// <param name="HostName">主機(jī)名 [如果為空或NULL,主機(jī)名將與域名保持一致.]</param>
/// <param name="ContainerName">主域名 主域 Name of the Container for the Zone, Cache, or RootHints instance that contains this RR.</param>
/// <returns></returns>
public bool DelCNAMEType(string HostName, string ContainerName)
{
try
{
string OwnerName = null;
if (string.IsNullOrEmpty(HostName))
{
OwnerName = ContainerName;
}
else
{
OwnerName = HostName + "." + ContainerName;
}
this.Create("MicrosoftDNS_CNAMEType");
//如果區(qū)域不存在
if (!IsExistsZone(ContainerName))
{
Console.WriteLine("區(qū)域:{0}不存在,刪除失敗", ContainerName);
errMessage = string.Format("區(qū)域:{0}不存在,刪除失敗", ContainerName);
return false;
}
if (!IsExistsCNAMEType(ContainerName, OwnerName))
{
Console.WriteLine("{0}中不存在{1},刪除失敗", ContainerName, OwnerName);
errMessage = string.Format("{0}中不存在{1},刪除失敗", ContainerName, OwnerName);
return false;
}
Q = QueryDNS("Select * From MicrosoftDNS_CNAMEType Where ContainerName='" + ContainerName + "' and OwnerName='" + OwnerName + "'");
foreach (ManagementObject oManObject in Q)
{
oManObject.Delete();
errMessage = "CNAME:" + OwnerName + "刪除成功.";
return true;
}
return false;
}
catch (Exception e)
{
errMessage = e.Message;
Console.WriteLine(e.ToString());
return false;
}
}
/// <summary>
/// 去除以.結(jié)尾的字符串的.
/// </summary>
/// <param name="str"></param>
/// <returns></returns>
private string ClearEndDot(string str)
{
string returnStr = str;
if (!string.IsNullOrEmpty(str))
{
int l = str.LastIndexOf(".");
if (l != -1 && l == str.Length - 1)
{
returnStr = str.Substring(0, str.Length - 1);
}
}
return returnStr;
}
}
}
相關(guān)文章
Unity3D實(shí)現(xiàn)人物轉(zhuǎn)向與移動(dòng)
這篇文章主要為大家詳細(xì)介紹了Unity3D實(shí)現(xiàn)人物轉(zhuǎn)向與移動(dòng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-01-01Unity UGUI的EventTrigger事件監(jiān)聽(tīng)器組件介紹使用示例
這篇文章主要為大家介紹了Unity UGUI的EventTrigger事件監(jiān)聽(tīng)器組件介紹及使用,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-08-08C#使用Jquery zTree實(shí)現(xiàn)樹(shù)狀結(jié)構(gòu)顯示 異步數(shù)據(jù)加載
這篇文章主要為大家詳細(xì)介紹了C#使用Jquery zTree實(shí)現(xiàn)樹(shù)狀結(jié)構(gòu)顯示和異步數(shù)據(jù)加載,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-12-12C#使用System.Net郵件發(fā)送功能踩過(guò)的坑
這篇文章主要介紹了C#使用System.Net郵件發(fā)送功能踩過(guò)的坑,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-11-11C#利用Label標(biāo)簽控件模擬窗體標(biāo)題的移動(dòng)及窗體顏色不斷變換效果
Label標(biāo)簽控件相信對(duì)大家來(lái)說(shuō)都不陌生,下面這篇文章主要給大家介紹了關(guān)于C#利用Label標(biāo)簽控件模擬窗體標(biāo)題的移動(dòng)及窗體顏色不斷變換效果的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下。2017-12-12C#使用Automation實(shí)現(xiàn)控制自動(dòng)撥打接聽(tīng)電話(huà)
這篇文章主要為大家詳細(xì)介紹了C#如何使用Automation實(shí)現(xiàn)控制自動(dòng)撥打接聽(tīng)電話(huà),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2024-02-02