手机
当前位置:查字典教程网 >编程开发 >C#教程 >C#利用WMI操作DNS服务器(可远程操作,需要相应权限)
C#利用WMI操作DNS服务器(可远程操作,需要相应权限)
摘要:usingSystem;usingSystem.Collections.Generic;usingSystem.Text;usingSyst...

usingSystem;

usingSystem.Collections.Generic;

usingSystem.Text;

usingSystem.Data;

namespaceYaosansi

{

classTest

{

staticvoidMain()

{

MyDnsTEST();

}

///<summary>

///MyDnsTEST功能测试

///C#利用WMI操作DNS服务器(可远程操作,需要相应权限)

///Author:yaosansi

///CreateDate:2005-09-07

///ModifyDate:2006-10-25

///Site:http://www.yaosansi.com/

///E-mail:yaosansiat126dotcom

///http://www.yaosansi.com/blog/article.asp?id=935

///http://yaosansi.cnblogs.com/archive/2006/11/04/DNSServiceInCsharpWithWMI.html

///注意:此版本为WINDOWS2003DNS服务器专用.不适合其它版本操作系统.

///</summary>

staticvoidMyDnsTEST()

{

Yaosansi.Net.MYDNSdns=newYaosansi.Net.MYDNS();

//===========================================

//不对以下三个属性赋值默认DNS服务器为本机.

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");

//DataTabletable=dns.ListExistsMXType("yaosansi.com");

DataTabletable=dns.ListExistsAType("yaosansi.com");

//DataTabletable=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();

}

}

}

usingSystem;

usingSystem.Management;

usingSystem.Data;

namespaceYaosansi.Net

{

///<summary>

///C#利用WMI操作DNS服务器(可远程操作,需要相应权限)

///Author:yaosansi

///CreateDate:2005-09-07

///ModifyDate:2006-10-25

///Site:http://www.yaosansi.com/

///E-mail:yaosansiat126dotcom

///http://www.yaosansi.com/blog/article.asp?id=935

///http://yaosansi.cnblogs.com/archive/2006/11/04/DNSServiceInCsharpWithWMI.html

///注意:此版本为WINDOWS2003DNS服务器专用.不适合其它版本操作系统.

///</summary>

publicclassMYDNS

{

//要连接的DNS服务器

privatestringsServerPath;

//用户名

privatestringusername=null;

//密码

privatestringpassword=null;

//服务器名称或IP地址

privatestringDNSName=null;

//表示管理操作的范围.这里是用来执行DNS的命名空间

privateManagementScopeDNS;

//用于返回检索的ManagementObject集合

privateSystem.Management.ManagementObjectCollectionQ;

//

privateManagementClassDnsClass;

//

privateManagementBaseObjectMI;

///<summary>

///返回的操作信息.

///</summary>

privatestringerrMessage=null;

///<summary>

///获取错误信息.

///</summary>

publicstringErrMessage

{

get

{

returnerrMessage;

}

}

///<summary>

///设置DNS服务器名称或IP地址

///</summary>

publicstringServerName

{

set

{

this.sServerPath=string.Format(@"{0}rootMicrosoftDNS",value);

this.DNSName=value;

}

}

///<summary>

///设置连接服务器的用户名(指定服务器IP,用户和密码后将自动连接远程服务器,本机不需要指定)

///</summary>

publicstringuserName

{

set

{

this.username=value;

}

}

///<summary>

///设置连接服务器的密码(指定服务器IP,用户和密码后将自动连接远程服务器,本机不需要指定)

///</summary>

publicstringpassWord

{

set

{

this.password=value;

}

}

///<summary>

///构造函数

///</summary>

publicMYDNS()

{

sServerPath=@"localhostrootMicrosoftDNS";

DNSName="localhost";

}

///<summary>

///建立对象.连接

///</summary>

///<paramname="DnsType">DNS类型MicrosoftDNS_Zone等</param>

privatevoidCreate(stringDnsType)

{

if(!string.IsNullOrEmpty(username)&&!string.IsNullOrEmpty(password))

{

System.Management.ConnectionOptionsConn=newConnectionOptions();

Conn.Username=username;//用户名

Conn.Password=password;//口令

DNS=newManagementScope(sServerPath,Conn);

}

else

{

DNS=newManagementScope(sServerPath);

}

if(!DNS.IsConnected)

{

DNS.Connect();

}

ManagementPathPath=newManagementPath(DnsType);

this.DnsClass=newManagementClass(DNS,Path,null);

}

///<summary>

///查询DNS并建立对象

///</summary>

///<paramname="query">WQL查询语句</param>

///<paramname="DnsType">DNS类型MicrosoftDNS_Zone等</param>

///<returns></returns>

publicManagementObjectCollectionQueryDNS(stringquery,stringDnsType)

{

this.Create(DnsType);

System.Management.ManagementObjectSearcherQS=newManagementObjectSearcher(DNS,newObjectQuery(query));

QS.Scope=DNS;

returnQS.Get();

}

///<summary>

///仅查询DNS

///</summary>

///<paramname="query">WQL查询语句</param>

///<returns></returns>

publicManagementObjectCollectionQueryDNS(stringquery)

{

if(!string.IsNullOrEmpty(username)&&!string.IsNullOrEmpty(password))

{

System.Management.ConnectionOptionsConn=newConnectionOptions();

Conn.Username=username;//用户名

Conn.Password=password;//口令

DNS=newManagementScope(sServerPath,Conn);

}

else

{

DNS=newManagementScope(sServerPath);

}

if(!DNS.IsConnected)

{

DNS.Connect();

}

System.Management.ManagementObjectSearcherQS=newManagementObjectSearcher(DNS,newObjectQuery(query));

QS.Scope=DNS;

returnQS.Get();

}

///<summary>

///判断区域是否存在

///</summary>

///<paramname="domain">区域名称</param>

///<returns></returns>

publicboolIsExistsZone(stringdomain)

{

try

{

Q=QueryDNS("Select*FromMicrosoftDNS_ZONEwhereContainerName='"+domain+"'");

foreach(ManagementObjectoManObjectinQ)

{

//Console.WriteLine(oManObject["ContainerName"].ToString());

returntrue;

}

returnfalse;

}

catch(Exceptione)

{

errMessage=e.Message;

Console.WriteLine(e.ToString());

returnfalse;

}

}

///<summary>

///创建一个新的区域,仅区域名称

///</summary>

///<paramname="domain">区域的名称</param>

publicboolCreateZone(stringdomain)

{

try

{

this.Create("MicrosoftDNS_Zone");

//如果区域已经存在

if(IsExistsZone(domain))

{

errMessage="域:"+domain+"已经存在.";

returnfalse;

}

//建立新的区域

this.MI=DnsClass.GetMethodParameters("CreateZone");

this.MI["ZoneName"]=domain;

this.MI["ZoneType"]=0;

ManagementBaseObjectOutParams=this.DnsClass.InvokeMethod("CreateZone",MI,null);

errMessage="域:"+domain+"创建成功.";

returntrue;

}

catch(Exceptione)

{

errMessage=e.Message;

Console.WriteLine(e.ToString());

returnfalse;

}

}

///<summary>

///创建一个区域,包括其它参数

///</summary>

///<paramname="domain">要创建的区域名称</param>

///<paramname="ZoneType">Typeofzone.Validvaluesarethefollowing:0Primaryzone.1Secondaryzone.2Stubzone.3Zoneforwarder.</param>

///<paramname="DataFileName">[in,optional]Nameofthedatafileassociatedwiththezone</param>

///<paramname="IpAddr">[in,optional]IPaddressofthematerDNSServerforthezone.</param>

///<paramname="AdminEmailName">[in,optional]Emailaddressoftheadministratorresponsibleforthezone</param>

///<returns></returns>

publicboolCreateZone(stringdomain,uintZoneType,stringDataFileName,string[]IpAddr,stringAdminEmailName)

{

try

{

this.Create("MicrosoftDNS_Zone");

//如果区域已经存在

if(IsExistsZone(domain))

{

errMessage="域:"+domain+"已经存在.";

returnfalse;

}

//建立新的区域

MI=DnsClass.GetMethodParameters("CreateZone");

MI["ZoneName"]=domain;

MI["ZoneType"]=ZoneType;

MI["DataFileName"]=DataFileName;

MI["IpAddr"]=IpAddr;

MI["AdminEmailName"]=AdminEmailName;

ManagementBaseObjectOutParams=this.DnsClass.InvokeMethod("CreateZone",MI,null);

errMessage="域:"+domain+"创建成功.";

returntrue;

}

catch(Exceptione)

{

errMessage=e.Message;

Console.WriteLine(e.ToString());

returnfalse;

}

}

///<summary>

///修改区域

///</summary>

///<paramname="domain">要修改的区域名称</param>

///<paramname="ZoneType">Typeofzone.Validvaluesarethefollowing:0Primaryzone.1Secondaryzone.2Stubzone.3Zoneforwarder.</param>

///<paramname="DataFileName">[in,optional]Nameofthedatafileassociatedwiththezone</param>

///<paramname="IpAddr">[in,optional]IPaddressofthematerDNSServerforthezone.</param>

///<paramname="AdminEmailName">[in,optional]Emailaddressoftheadministratorresponsibleforthezone</param>

///<returns></returns>

publicboolChangeZoneType(stringdomain,uintZoneType,stringDataFileName,string[]IpAddr,stringAdminEmailName)

{

try

{

Q=QueryDNS("Select*FromMicrosoftDNS_ZONEwhereContainerName='"+domain+"'","MicrosoftDNS_Zone");

foreach(ManagementObjectoManObjectinQ)

{

MI=oManObject.GetMethodParameters("ChangeZoneType");

MI["ZoneType"]=ZoneType;

MI["DataFileName"]=DataFileName;

MI["IpAddr"]=IpAddr;

MI["AdminEmailName"]=AdminEmailName;

oManObject.InvokeMethod("ChangeZoneType",MI,null);

errMessage="域:"+domain+"修改成功.";

returntrue;

}

errMessage="未找到域:"+domain;

returnfalse;

}

catch(Exceptione)

{

errMessage=e.Message;

Console.WriteLine(e.ToString());

returnfalse;

}

}

///<summary>

///删除区域

///</summary>

///<paramname="domain">要册除的区域的名称</param>

///<returns></returns>

publicboolDelZone(stringdomain)

{

try

{

Q=QueryDNS("Select*FromMicrosoftDNS_ZONEwhereContainerName='"+domain+"'","MicrosoftDNS_Zone");

foreach(ManagementObjectoManObjectinQ)

{

oManObject.Delete();

errMessage="域:"+domain+"删除成功.";

returntrue;

}

errMessage="未找到域:"+domain;

returnfalse;

}

catch(Exceptione)

{

errMessage=e.Message;

Console.WriteLine(e.ToString());

returnfalse;

}

}

///<summary>

///判断在某MicrosoftDNS_AType是否在指定的域中存在

///</summary>

///<paramname="domain"></param>

///<paramname="OwnerName"></param>

///<returns></returns>

publicboolIsExistsAType(stringdomain,stringOwnerName)

{

try

{

Q=QueryDNS("Select*FromMicrosoftDNS_ATypewhereOwnerName='"+OwnerName+"'andContainerName='"+domain+"'");

foreach(ManagementObjectoManObjectinQ)

{

//Console.WriteLine(oManObject["OwnerName"].ToString());

returntrue;

}

returnfalse;

}

catch(Exceptione)

{

errMessage=e.Message;

Console.WriteLine(e.ToString());

returnfalse;

}

}

///<summary>

///创建MicrosoftDNS_AType

///</summary>

///<paramname="ContainerName">NameoftheContainerfortheZone,Cache,orRootHintsinstancewhichcontainsthisRR</param>

///<paramname="HostName">主机名[如果为空或NULL,主机名将与域名保持一致.]</param>

///<paramname="TTL">Time,inseconds,thattheRRcanbecachedbyaDNSresolver</param>

///<paramname="IPAddress">StringrepresentingtheIPv4addressofthehost</param>

///<returns></returns>

publicboolCreateAType(stringContainerName,stringHostName,stringIPAddress,stringTTL)

{

try

{

stringOwnerName=null;

if(string.IsNullOrEmpty(HostName))

{

OwnerName=ContainerName;

}

else

{

OwnerName=HostName+"."+ContainerName;

}

this.Create("MicrosoftDNS_AType");

//如果区域不存在

if(!IsExistsZone(ContainerName))

{

Console.WriteLine("区域:{0}不存在,创建失败",ContainerName);

errMessage=string.Format("区域:{0}不存在,创建失败",ContainerName);

returnfalse;

}

if(IsExistsAType(ContainerName,OwnerName))

{

Console.WriteLine("{0}中已存在{1},创建失败",ContainerName,OwnerName);

errMessage=string.Format("{0}中已存在{1},创建失败",ContainerName,OwnerName);

returnfalse;

}

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+"创建成功.";

returntrue;

}

catch(Exceptione)

{

errMessage=e.Message;

Console.WriteLine(e.ToString());

returnfalse;

}

}

///<summary>

///创建MicrosoftDNS_AType

///</summary>

///<paramname="DnsServerName">FQDNorIPaddressoftheDNSServerthatcontainsthisRR</param>

///<paramname="ContainerName">NameoftheContainerfortheZone,Cache,orRootHintsinstancewhichcontainsthisRR</param>

///<paramname="HostName">主机名[如果为空或NULL,主机名将与域名保持一致.]</param>

///<paramname="RecordClass">ClassoftheRR.Defaultvalueis1.Thefollowingvaluesarevalid.1IN(Internet)2CS(CSNET)3CH(CHAOS)4HS(Hesiod)</param>

///<paramname="TTL">Time,inseconds,thattheRRcanbecachedbyaDNSresolver</param>

///<paramname="IPAddress">StringrepresentingtheIPv4addressofthehost</param>

///<returns></returns>

publicboolCreateAType(stringDnsServerName,stringContainerName,stringHostName,uintRecordClass,uintTTL,stringIPAddress)

{

try

{

stringOwnerName=null;

if(string.IsNullOrEmpty(HostName))

{

OwnerName=ContainerName;

}

else

{

OwnerName=HostName+"."+ContainerName;

}

this.Create("MicrosoftDNS_AType");

//如果区域不存在

if(!IsExistsZone(ContainerName))

{

Console.WriteLine("区域:{0}不存在,创建失败",ContainerName);

errMessage=string.Format("区域:{0}不存在,创建失败",ContainerName);

returnfalse;

}

if(IsExistsAType(ContainerName,OwnerName))

{

Console.WriteLine("{0}中已存在{1},创建失败",ContainerName,OwnerName);

errMessage=string.Format("{0}中已存在{1},创建失败",ContainerName,OwnerName);

returnfalse;

}

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+"创建成功.";

returntrue;

}

catch(Exceptione)

{

errMessage=e.Message;

Console.WriteLine(e.ToString());

returnfalse;

}

}

///<summary>

///修改MicrosoftDNS_AType

///</summary>

///<paramname="ContainerName">NameoftheContainerfortheZone,Cache,orRootHintsinstancewhichcontainsthisRR</param>

///<paramname="HostName">主机名[如果为空或NULL,主机名将与域名保持一致.]</param>

///<paramname="TTL">Time,inseconds,thattheRRcanbecachedbyaDNSresolver</param>

///<paramname="IPAddress"></param>

///<returns></returns>

publicboolModifyAType(stringContainerName,stringHostName,stringIPAddress,stringTTL)

{

try

{

stringOwnerName=null;

if(string.IsNullOrEmpty(HostName))

{

OwnerName=ContainerName;

}

else

{

OwnerName=HostName+"."+ContainerName;

}

//如果区域不存在

if(!IsExistsZone(ContainerName))

{

Console.WriteLine("区域:{0}不存在,修改失败",ContainerName);

errMessage=string.Format("区域:{0}不存在,修改失败",ContainerName);

returnfalse;

}

if(!IsExistsAType(ContainerName,OwnerName))

{

Console.WriteLine("{0}中不存在{1},修改失败",ContainerName,OwnerName);

errMessage=string.Format("{0}中不存在{1},修改失败",ContainerName,OwnerName);

returnfalse;

}

Q=QueryDNS("Select*FromMicrosoftDNS_ATypewhereContainerName='"+ContainerName+"'andOwnerName='"+OwnerName+"'","MicrosoftDNS_AType");

foreach(ManagementObjectoManObjectinQ)

{

//foreach(PropertyDatapinoManObject.Properties)

//{

//try

//{Console.WriteLine(p.Name+"="+oManObject[p.Name]);}

//catch

//{}

//}

if(oManObject["IPAddress"].ToString()==IPAddress)

{

errMessage="A记录:"+OwnerName+"修改失败,必须修改IP地址.";

returnfalse;

}

MI=oManObject.GetMethodParameters("Modify");

MI["IPAddress"]=IPAddress;

MI["TTL"]=TTL;

oManObject.InvokeMethod("Modify",MI,null);

errMessage="A记录:"+OwnerName+"修改成功.";

returntrue;

}

errMessage=string.Format("{0}中不存在{1},修改失败",ContainerName,OwnerName);

returnfalse;

}

catch(Exceptione)

{

errMessage=e.Message;

Console.WriteLine(e.ToString());

returnfalse;

}

}

///<summary>

///删除MicrosoftDNS_AType

///</summary>

///<paramname="ContainerName">NameoftheContainerfortheZone,Cache,orRootHintsinstancewhichcontainsthisRR</param>

///<paramname="HostName">主机名[如果为空或NULL,主机名将与域名保持一致.]</param>

///<returns></returns>

publicboolDelAType(stringContainerName,stringHostName)

{

try

{

stringOwnerName=null;

if(string.IsNullOrEmpty(HostName))

{

OwnerName=ContainerName;

}

else

{

OwnerName=HostName+"."+ContainerName;

}

//如果区域不存在

if(!IsExistsZone(ContainerName))

{

Console.WriteLine("区域:{0}不存在,删除失败",ContainerName);

errMessage=string.Format("区域:{0}不存在,删除失败",ContainerName);

returnfalse;

}

if(!IsExistsAType(ContainerName,OwnerName))

{

Console.WriteLine("{0}中不存在{1},删除失败",ContainerName,OwnerName);

errMessage=string.Format("{0}中不存在{1},删除失败",ContainerName,OwnerName);

returnfalse;

}

Q=QueryDNS("Select*FromMicrosoftDNS_ATypewhereContainerName='"+ContainerName+"'andOwnerName='"+OwnerName+"'","MicrosoftDNS_AType");

foreach(ManagementObjectoManObjectinQ)

{

oManObject.Delete();

errMessage="A记录:"+OwnerName+"删除成功.";

returntrue;

}

errMessage=string.Format("{0}中不存在{1},删除失败",ContainerName,OwnerName);

returnfalse;

}

catch(Exceptione)

{

errMessage=e.Message;

Console.WriteLine(e.ToString());

returnfalse;

}

}

///<summary>

///列出某域名下的所有A记录.

///</summary>

///<paramname="ContainerName">NameoftheContainerfortheZone,Cache,orRootHintsinstancewhichcontainsthisRR</param>

///<returns></returns>

publicDataTableListExistsAType(stringContainerName)

{

Yaosansi.IO.Loglog=newYaosansi.IO.Log();

log.WirteLogTime();

log.WirteLog(ContainerName);

DataTabletable=newDataTable("MicrosoftDNS_AType"+ContainerName);

table.Columns.Add("主机名(A)");

table.Columns.Add("IP地址");

table.Columns.Add("TTL");

try

{

Q=QueryDNS("Select*FromMicrosoftDNS_ATypewhereContainerName='"+ContainerName+"'");

foreach(ManagementObjectoManObjectinQ)

{

try

{

DataRowrow=table.NewRow();

row["主机名(A)"]=oManObject["OwnerName"];

row["IP地址"]=oManObject["IPAddress"];

row["TTL"]=oManObject["TTL"];

table.Rows.Add(row);

}

catch(Exceptione){log.WirteLog(e.ToString());}

}

}

catch(Exceptione)

{

errMessage=e.Message;

Console.WriteLine(e.ToString());

log.WirteLog(e.ToString());

}

Yaosansi.Data.DataHelp.PrintTableLog(table);

returntable;

}

///<summary>

///列出某域名下的所有MX记录.

///</summary>

///<paramname="ContainerName">NameoftheContainerfortheZone,Cache,orRootHintsinstancewhichcontainsthisRR</param>

///<returns></returns>

publicDataTableListExistsMXType(stringContainerName)

{

DataTabletable=newDataTable("MicrosoftDNS_MXType"+ContainerName);

table.Columns.Add("邮件交换记录(MX)");

table.Columns.Add("目标主机");

table.Columns.Add("优先级");

table.Columns.Add("TTL");

try

{

Q=QueryDNS("Select*FromMicrosoftDNS_MXTypewhereContainerName='"+ContainerName+"'");

foreach(ManagementObjectoManObjectinQ)

{

try

{

DataRowrow=table.NewRow();

row["目标主机"]=oManObject["MailExchange"];

row["邮件交换记录(MX)"]=oManObject["OwnerName"];

row["优先级"]=oManObject["Preference"];

row["TTL"]=oManObject["TTL"];

table.Rows.Add(row);

}

catch{}

}

}

catch(Exceptione)

{

errMessage=e.Message;

Console.WriteLine(e.ToString());

}

returntable;

}

///<summary>

///列出某域名下的所有别名.

///</summary>

///<paramname="ContainerName">NameoftheContainerfortheZone,Cache,orRootHintsinstancewhichcontainsthisRR</param>

///<returns></returns>

publicDataTableListExistsCNAMEType(stringContainerName)

{

DataTabletable=newDataTable("MicrosoftDNS_CNAMEType"+ContainerName);

table.Columns.Add("别名(CNAME)");

table.Columns.Add("别名主机");

table.Columns.Add("TTL");

try

{

Q=QueryDNS("Select*FromMicrosoftDNS_CNAMETypewhereContainerName='"+ContainerName+"'");

foreach(ManagementObjectoManObjectinQ)

{

try

{

DataRowrow=table.NewRow();

row["别名(CNAME)"]=oManObject["OwnerName"];

row["别名主机"]=oManObject["PrimaryName"];

row["TTL"]=oManObject["TTL"];

table.Rows.Add(row);

}

catch{}

}

}

catch(Exceptione)

{

errMessage=e.Message;

Console.WriteLine(e.ToString());

}

returntable;

}

///<summary>

///判断在某MicrosoftDNS_MXType是否在指定的域中存在

///</summary>

///<paramname="ContainerName">主域名主域NameoftheContainerfortheZone,Cache,orRootHintsinstancethatcontainsthisRR.</param>

///<paramname="OwnerName">OwnernamefortheRR.</param>

///<returns></returns>

publicboolIsExistsMXType(stringContainerName,stringOwnerName)

{

try

{

Q=QueryDNS("Select*FromMicrosoftDNS_MXTypeWhereContainerName='"+ContainerName+"'andOwnerName='"+OwnerName+"'");

foreach(ManagementObjectoManObjectinQ)

{

//Console.WriteLine(oManObject["MailExchange"].ToString());

returntrue;

}

returnfalse;

}

catch(Exceptione)

{

errMessage=e.Message;

Console.WriteLine(e.ToString());

returnfalse;

}

}

///<summary>

///创建MicrosoftDNS_MXType记录(邮件交换记录)

///</summary>

///<paramname="HostName">主机名[如果为空或NULL,主机名将与域名保持一致.]</param>

///<paramname="ContainerName">主域NameoftheContainerfortheZone,Cache,orRootHintsinstancethatcontainsthisRR.</param>

///<paramname="MailExchange">目标主机FQDNspecifyingahostwillingtoactasamailexchangefortheownername</param>

///<paramname="Preference">优先级PreferencegiventothisRRamongothersatthesameowner.Lowervaluesarepreferred</param>

///<paramname="TTL">Time,inseconds,thattheRRcanbecachedbyaDNSresolver</param>

///<returns></returns>

publicboolCreateMXType(stringHostName,stringContainerName,stringMailExchange,stringPreference,stringTTL)

{

try

{

stringOwnerName=null;

if(string.IsNullOrEmpty(HostName))

{

OwnerName=ContainerName;

}

else

{

OwnerName=HostName+"."+ContainerName;

}

this.Create("MicrosoftDNS_MXType");

//如果区域不存在

if(!IsExistsZone(ContainerName))

{

Console.WriteLine("区域:{0}不存在,创建失败",ContainerName);

errMessage=string.Format("区域:{0}不存在,创建失败",ContainerName);

returnfalse;

}

if(IsExistsMXType(ContainerName,OwnerName))

{

Console.WriteLine("{0}中已存在{1},创建失败",ContainerName,OwnerName);

errMessage=string.Format("{0}中已存在{1},创建失败",ContainerName,OwnerName);

returnfalse;

}

MI=DnsClass.GetMethodParameters("CreateInstanceFromPropertyData");

MI["DnsServerName"]="localhost";

MI["ContainerName"]=ContainerName;

//MI["RecordClass"]=1;//Defaultvalueis1.//1IN(Internet)//2CS(CSNET)//3CH(CHAOS)//4HS(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+"创建成功.";

returntrue;

}

catch(Exceptione)

{

errMessage=e.Message;

Console.WriteLine(e.ToString());

returnfalse;

}

}

///<summary>

///修改MicrosoftDNS_MXType记录(修改邮件交换记录)

///</summary>

///<paramname="HostName">主机名[如果为空或NULL,主机名将与域名保持一致.]</param>

///<paramname="ContainerName">主域名主域NameoftheContainerfortheZone,Cache,orRootHintsinstancethatcontainsthisRR.</param>

///<paramname="TTL">[in,optional]Time,inseconds,thattheRRcanbecachedbyaDNSresolver.</param>

///<paramname="MailExchange">[in,optional]FQDNspecifyingahostwillingtoactasamailexchangefortheownername.</param>

///<paramname="Preference">邮件优先级[in,optional]PreferencegiventothisRRamongothersatthesameowner.Lowervaluesarepreferred.</param>

///<returns></returns>

publicboolModifyMXType(stringHostName,stringContainerName,stringTTL,stringMailExchange,stringPreference)

{

try

{

stringOwnerName=null;

if(string.IsNullOrEmpty(HostName))

{

OwnerName=ContainerName;

}

else

{

OwnerName=HostName+"."+ContainerName;

}

this.Create("MicrosoftDNS_MXType");

//如果区域不存在

if(!IsExistsZone(ContainerName))

{

Console.WriteLine("区域:{0}不存在,修改失败",ContainerName);

errMessage=string.Format("区域:{0}不存在,修改失败",ContainerName);

returnfalse;

}

if(!IsExistsMXType(ContainerName,OwnerName))

{

Console.WriteLine("{0}中不存在{1},修改失败",ContainerName,OwnerName);

errMessage=string.Format("{0}中不存在{1},修改失败",ContainerName,OwnerName);

returnfalse;

}

Q=QueryDNS("Select*FromMicrosoftDNS_MXTypeWhereContainerName='"+ContainerName+"'andOwnerName='"+OwnerName+"'");

foreach(ManagementObjectoManObjectinQ)

{

MI=oManObject.GetMethodParameters("Modify");

if(string.IsNullOrEmpty(TTL))

{

TTL="3600";

}

if(ClearEndDot(oManObject["MailExchange"].ToString())==ClearEndDot(MailExchange)&&oManObject["Preference"].ToString()==Preference)

{

errMessage="MX记录:"+OwnerName+"修改失败,必须修改目标主机或邮件优先级.";

returnfalse;

}

MI["TTL"]=TTL;

MI["MailExchange"]=MailExchange;

MI["Preference"]=Preference;

oManObject.InvokeMethod("Modify",MI,null);

errMessage="MX记录:"+OwnerName+"修改成功.";

returntrue;

}

returnfalse;

}

catch(Exceptione)

{

errMessage=e.Message;

Console.WriteLine(e.ToString());

returnfalse;

}

}

///<summary>

///删除MicrosoftDNS_MXType

///</summary>

///<paramname="HostName">主机名[如果为空或NULL,主机名将与域名保持一致.]</param>

///<paramname="ContainerName">主域名主域NameoftheContainerfortheZone,Cache,orRootHintsinstancethatcontainsthisRR.</param>

///<returns></returns>

publicboolDelMXType(stringHostName,stringContainerName)

{

try

{

stringOwnerName=null;

if(string.IsNullOrEmpty(HostName))

{

OwnerName=ContainerName;

}

else

{

OwnerName=HostName+"."+ContainerName;

}

this.Create("MicrosoftDNS_MXType");

//如果区域不存在

if(!IsExistsZone(ContainerName))

{

Console.WriteLine("区域:{0}不存在,删除失败",ContainerName);

errMessage=string.Format("区域:{0}不存在,删除失败",ContainerName);

returnfalse;

}

if(!IsExistsMXType(ContainerName,OwnerName))

{

Console.WriteLine("{0}中不存在{1},删除失败",ContainerName,OwnerName);

errMessage=string.Format("{0}中不存在{1},删除失败",ContainerName,OwnerName);

returnfalse;

}

Q=QueryDNS("Select*FromMicrosoftDNS_MXTypeWhereContainerName='"+ContainerName+"'andOwnerName='"+OwnerName+"'");

foreach(ManagementObjectoManObjectinQ)

{

oManObject.Delete();

errMessage="MX记录:"+OwnerName+"删除成功.";

returntrue;

}

returnfalse;

}

catch(Exceptione)

{

errMessage=e.Message;

Console.WriteLine(e.ToString());

returnfalse;

}

}

///<summary>

///判断在某MicrosoftDNS_CNAMEType是否在指定的域中存在

///</summary>

///<paramname="ContainerName">主域名主域NameoftheContainerfortheZone,Cache,orRootHintsinstancethatcontainsthisRR.</param>

///<paramname="OwnerName">OwnernamefortheRR.</param>

///<returns></returns>

publicboolIsExistsCNAMEType(stringContainerName,stringOwnerName)

{

try

{

Q=QueryDNS("Select*FromMicrosoftDNS_CNAMETypeWhereContainerName='"+ContainerName+"'andOwnerName='"+OwnerName+"'");

foreach(ManagementObjectoManObjectinQ)

{

//Console.WriteLine(oManObject["MailExchange"].ToString());

returntrue;

}

returnfalse;

}

catch(Exceptione)

{

errMessage=e.Message;

Console.WriteLine(e.ToString());

returnfalse;

}

}

///<summary>

///创建MicrosoftDNS_CNAMEType记录(别名)

///</summary>

///<paramname="HostName">主机名[如果为空或NULL,主机名将与域名保持一致.]</param>

///<paramname="ContainerName">主域NameoftheContainerfortheZone,Cache,orRootHintsinstancethatcontainsthisRR.</param>

///<paramname="PrimaryName">in]PrimarynameoftheCNAMERR</param>

///<paramname="TTL">Time,inseconds,thattheRRcanbecachedbyaDNSresolver</param>

///<returns></returns>

publicboolCreateCNAMEType(stringHostName,stringContainerName,stringPrimaryName,stringTTL)

{

try

{

stringOwnerName=null;

if(string.IsNullOrEmpty(HostName))

{

OwnerName=ContainerName;

}

else

{

OwnerName=HostName+"."+ContainerName;

}

this.Create("MicrosoftDNS_CNAMEType");

//如果区域不存在

if(!IsExistsZone(ContainerName))

{

Console.WriteLine("区域:{0}不存在,创建失败",ContainerName);

errMessage=string.Format("区域:{0}不存在,创建失败",ContainerName);

returnfalse;

}

if(IsExistsCNAMEType(ContainerName,OwnerName))

{

Console.WriteLine("{0}中已存在{1},创建失败",ContainerName,OwnerName);

errMessage=string.Format("{0}中已存在{1},创建失败",ContainerName,OwnerName);

returnfalse;

}

MI=DnsClass.GetMethodParameters("CreateInstanceFromPropertyData");

MI["DnsServerName"]="localhost";

MI["ContainerName"]=ContainerName;

//MI["RecordClass"]=1;//Defaultvalueis1.//1IN(Internet)//2CS(CSNET)//3CH(CHAOS)//4HS(Hesiod)

MI["PrimaryName"]=PrimaryName;

MI["OwnerName"]=OwnerName;

if(string.IsNullOrEmpty(TTL))

{

TTL="3600";

}

MI["TTL"]=TTL;

DnsClass.InvokeMethod("CreateInstanceFromPropertyData",MI,null);

errMessage="CNAME:"+OwnerName+"创建成功.";

returntrue;

}

catch(Exceptione)

{

errMessage=e.Message;

Console.WriteLine(e.ToString());

returnfalse;

}

}

///<summary>

///修改MicrosoftDNS_CNAMEType记录(别名)

///</summary>

///<paramname="HostName">主机名[如果为空或NULL,主机名将与域名保持一致.]</param>

///<paramname="ContainerName">主域名主域NameoftheContainerfortheZone,Cache,orRootHintsinstancethatcontainsthisRR.</param>

///<paramname="TTL">[in,optional]Time,inseconds,thattheRRcanbecachedbyaDNSresolver.</param>

///<paramname="PrimaryName">in]PrimarynameoftheCNAMERR</param>

///<returns></returns>

publicboolModifyCNAMEType(stringHostName,stringContainerName,stringTTL,stringPrimaryName)

{

try

{

stringOwnerName=null;

if(string.IsNullOrEmpty(HostName))

{

OwnerName=ContainerName;

}

else

{

OwnerName=HostName+"."+ContainerName;

}

this.Create("MicrosoftDNS_CNAMEType");

//如果区域不存在

if(!IsExistsZone(ContainerName))

{

Console.WriteLine("区域:{0}不存在,修改失败",ContainerName);

errMessage=string.Format("区域:{0}不存在,修改失败",ContainerName);

returnfalse;

}

if(!IsExistsCNAMEType(ContainerName,OwnerName))

{

Console.WriteLine("{0}中不存在{1},修改失败",ContainerName,OwnerName);

errMessage=string.Format("{0}中不存在{1},修改失败",ContainerName,OwnerName);

returnfalse;

}

Q=QueryDNS("Select*FromMicrosoftDNS_CNAMETypeWhereContainerName='"+ContainerName+"'andOwnerName='"+OwnerName+"'");

foreach(ManagementObjectoManObjectinQ)

{

if(ClearEndDot(oManObject["PrimaryName"].ToString())==ClearEndDot(PrimaryName))

{

errMessage="CName记录:"+OwnerName+"修改失败,必须修改别名主机.";

returnfalse;

}

MI=oManObject.GetMethodParameters("Modify");

if(string.IsNullOrEmpty(TTL))

{

TTL="3600";

}

MI["TTL"]=TTL;

MI["PrimaryName"]=PrimaryName;

oManObject.InvokeMethod("Modify",MI,null);

errMessage="CNAME:"+OwnerName+"修改成功.";

returntrue;

}

returnfalse;

}

catch(Exceptione)

{

errMessage=e.Message;

Console.WriteLine(e.ToString());

returnfalse;

}

}

///<summary>

///删除MicrosoftDNS_CNAMEType

///</summary>

///<paramname="HostName">主机名[如果为空或NULL,主机名将与域名保持一致.]</param>

///<paramname="ContainerName">主域名主域NameoftheContainerfortheZone,Cache,orRootHintsinstancethatcontainsthisRR.</param>

///<returns></returns>

publicboolDelCNAMEType(stringHostName,stringContainerName)

{

try

{

stringOwnerName=null;

if(string.IsNullOrEmpty(HostName))

{

OwnerName=ContainerName;

}

else

{

OwnerName=HostName+"."+ContainerName;

}

this.Create("MicrosoftDNS_CNAMEType");

//如果区域不存在

if(!IsExistsZone(ContainerName))

{

Console.WriteLine("区域:{0}不存在,删除失败",ContainerName);

errMessage=string.Format("区域:{0}不存在,删除失败",ContainerName);

returnfalse;

}

if(!IsExistsCNAMEType(ContainerName,OwnerName))

{

Console.WriteLine("{0}中不存在{1},删除失败",ContainerName,OwnerName);

errMessage=string.Format("{0}中不存在{1},删除失败",ContainerName,OwnerName);

returnfalse;

}

Q=QueryDNS("Select*FromMicrosoftDNS_CNAMETypeWhereContainerName='"+ContainerName+"'andOwnerName='"+OwnerName+"'");

foreach(ManagementObjectoManObjectinQ)

{

oManObject.Delete();

errMessage="CNAME:"+OwnerName+"删除成功.";

returntrue;

}

returnfalse;

}

catch(Exceptione)

{

errMessage=e.Message;

Console.WriteLine(e.ToString());

returnfalse;

}

}

///<summary>

///去除以.结尾的字符串的.

///</summary>

///<paramname="str"></param>

///<returns></returns>

privatestringClearEndDot(stringstr)

{

stringreturnStr=str;

if(!string.IsNullOrEmpty(str))

{

intl=str.LastIndexOf(".");

if(l!=-1&&l==str.Length-1)

{

returnStr=str.Substring(0,str.Length-1);

}

}

returnreturnStr;

}

}

}

【C#利用WMI操作DNS服务器(可远程操作,需要相应权限)】相关文章:

C#数值转换-显式数值转换表(参考)

C#常用知识点简单回顾(有图有真相)

C#访问应用程序配置文件的方法

深入多线程之:深入分析Interlocked

C#启动windows服务方法的相关问题分析

C#中如何执行存储过程方法

C#利用com操作excel释放进程的解决方法

C# 操作符之三元操作符浅析

c#创建Graphics对象的三种方法

通过C#调用cmd来修改服务启动类型

精品推荐
分类导航