您的位置:首页 > 编程语言 > C#

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

2008-12-16 12:39 447 查看
public class DNSAdminLib
{
//要连接的DNS服务器
private string sServerPath;
//用户名
private string username = null;
//密码
private string password = null;
//服务器名称或IP地址
private string DNSName = null;
//表示管理操作的范围.这里是用来执行DNS的命名空间
private ManagementScope DNS;
//用于返回检索的ManagementObject集合
private System.Management.ManagementObjectCollection Q;
//
private ManagementClass DnsClass;
//
private ManagementBaseObject MI;
/// <summary>
/// DNS服务器名称或IP地址
/// </summary>
public string ServerName
{
set
{
this.sServerPath = string.Format(@"//{0}/root/MicrosoftDNS", value);
this.DNSName = value;
}
}

/// <summary>
/// 连接服务器的用户名
/// </summary>
public string userName
{
set
{
this.username = value;
}
}

/// <summary>
/// 连接服务器的密码
/// </summary>
public string passWord
{
set
{
this.password = value;
}
}

//构造函数
public DNSAdminLib()
{
sServerPath = @"//localhost/root/MicrosoftDNS";
DNSName = "localhost";

}

/// <summary>
/// 建立对象.连接
/// </summary>
/// <param name="DnsType">DNS类型 MicrosoftDNS_Zone等</param>
private void Create(string DnsType)
{
DNS = new ManagementScope(sServerPath);
if (!DNS.IsConnected)
{
DNS.Connect();
}
ManagementPath Path = new ManagementPath(DnsType);
this.DnsClass = new ManagementClass(DNS, Path, null);
}

/// <summary>
/// 查询DNS并建立对象
/// </summary>
/// <param name="query">WQL查询语句</param>
/// <param name="DnsType">DNS类型 MicrosoftDNS_Zone等</param>
/// <returns></returns>
public ManagementObjectCollection QueryDNS(string query, string DnsType)
{
this.Create(DnsType);
System.Management.ManagementObjectSearcher QS = new ManagementObjectSearcher(DNS, new ObjectQuery(query));
QS.Scope = DNS;
return QS.Get();
}

/// <summary>
/// 仅查询DNS
/// </summary>
/// <param name="query">WQL查询语句</param>
/// <returns></returns>
public ManagementObjectCollection QueryDNS(string query)
{
DNS = new ManagementScope(sServerPath);
if (!DNS.IsConnected)
{
DNS.Connect();
}
System.Management.ManagementObjectSearcher QS = new ManagementObjectSearcher(DNS, new ObjectQuery(query));
QS.Scope = DNS;
return QS.Get();
}

/// <summary>
/// 判断区域是否存在
/// </summary>
/// <param name="domain">区域名称</param>
/// <returns></returns>
public bool IsExistsZone(string domain)
{

try
{
Q = QueryDNS("Select * From MicrosoftDNS_ZONE where ContainerName='" + domain + "'");
foreach (ManagementObject oManObject in Q)
{
//Console.WriteLine(oManObject["ContainerName"].ToString());
return true;
}
return false;
}
catch
{
return false;
}

}

/// <summary>
/// 创建一个新的区域,仅区域名称
/// </summary>
/// <param name="domain">区域的名称</param>
public bool CreateZone(string domain)
{
try
{
this.Create("MicrosoftDNS_Zone");
//如果区域已经存在
if (IsExistsZone(domain))
{
return false;
}
//建立新的区域
this.MI = DnsClass.GetMethodParameters("CreateZone");
this.MI["ZoneName"] = domain;
this.MI["ZoneType"] = 0;

ManagementBaseObject OutParams = this.DnsClass.InvokeMethod("CreateZone", MI, null);
return true;
}
catch
{
return false;
}

}

/// <summary>
/// 创建一个区域,包括其它参数
/// </summary>
/// <param name="domain">要创建的区域名称</param>
/// <param name="ZoneType">Type of zone. Valid values are the following:0 Primary zone. 1 Secondary zone. 2 Stub zone. 3 Zone forwarder. </param>
/// <param name="DataFileName">[in, optional] Name of the data file associated with the zone</param>
/// <param name="IpAddr">[in, optional] IP address of the mater DNS Server for the zone. </param>
/// <param name="AdminEmailName">[in, optional] Email address of the administrator responsible for the zone</param>
/// <returns></returns>
public bool CreateZone(string domain, uint ZoneType, string DataFileName, string[] IpAddr, string AdminEmailName)
{
try
{
this.Create("MicrosoftDNS_Zone");
//如果区域已经存在
if (IsExistsZone(domain))
{
return false;
}
//建立新的区域
MI = DnsClass.GetMethodParameters("CreateZone");
MI["ZoneName"] = domain;
MI["ZoneType"] = ZoneType;
MI["DataFileName"] = DataFileName;
MI["IpAddr"] = IpAddr;
MI["AdminEmailName"] = AdminEmailName;
ManagementBaseObject OutParams = this.DnsClass.InvokeMethod("CreateZone", MI, null);
return true;
}
catch
{
return false;
}

}

/// <summary>
/// 修改区域
/// </summary>
/// <param name="domain">要修改的区域名称</param>
/// <param name="ZoneType">Type of zone. Valid values are the following:0 Primary zone. 1 Secondary zone. 2 Stub zone. 3 Zone forwarder. </param>
/// <param name="DataFileName">[in, optional] Name of the data file associated with the zone</param>
/// <param name="IpAddr">[in, optional] IP address of the mater DNS Server for the zone. </param>
/// <param name="AdminEmailName">[in, optional] Email address of the administrator responsible for the zone</param>
/// <returns></returns>
public bool ChangeZoneType(string domain, uint ZoneType, string DataFileName, string[] IpAddr, string AdminEmailName)
{
try
{
Q = QueryDNS("Select * From MicrosoftDNS_ZONE where ContainerName='" + domain + "'", "MicrosoftDNS_Zone");

foreach (ManagementObject oManObject in Q)
{
MI = oManObject.GetMethodParameters("ChangeZoneType");
MI["ZoneType"] = ZoneType;
MI["DataFileName"] = DataFileName;
MI["IpAddr"] = IpAddr;
MI["AdminEmailName"] = AdminEmailName;
oManObject.InvokeMethod("ChangeZoneType", MI, null);
return true;
}
return false;
}
catch
{
return false;
}
}

/// <summary>
/// 删除区域
/// </summary>
/// <param name="domain">要册除的区域的名称</param>
/// <returns></returns>
public bool DelZone(string domain)
{
try
{
Q = QueryDNS("Select * From MicrosoftDNS_ZONE where ContainerName='" + domain + "'", "MicrosoftDNS_Zone");
foreach (ManagementObject oManObject in Q)
{
oManObject.Delete();
return true;
}
return false;
}
catch
{
return false;
}

}

/// <summary>
/// 判断在某MicrosoftDNS_AType是否在指定的域中存在
/// </summary>
/// <param name="domain"></param>
/// <param name="OwnerName"></param>
/// <returns></returns>
public bool IsExistsAType(string domain, string OwnerName)
{
try
{
Q = QueryDNS("Select * From MicrosoftDNS_AType where OwnerName='" + OwnerName + "' and ContainerName='" + domain + "'");
foreach (ManagementObject oManObject in Q)
{
//Console.WriteLine(oManObject["OwnerName"].ToString());
return true;
}
return false;
}
catch
{
return false;
}
}

/// <summary>
/// 创建MicrosoftDNS_AType
/// </summary>
/// <param name="ContainerName">Name of the Container for the Zone, Cache, or RootHints instance which contains this RR</param>
/// <param name="OwnerName">Owner name for the RR</param>
/// <param name="RecordClass">Class of the RR. Default value is 1. The following values are valid.1 IN (Internet) 2 CS (CSNET) 3 CH (CHAOS) 4 HS (Hesiod) </param>
/// <param name="TTL">Time, in seconds, that the RR can be cached by a DNS resolver</param>
/// <param name="IPAddress">String representing the IPv4 address of the host</param>
/// <returns></returns>
public bool CreateAType(string ContainerName, string OwnerName, string IPAddress)
{
try
{
this.Create("MicrosoftDNS_AType");
//如果区域不存在
if (!IsExistsZone(ContainerName))
{
Console.WriteLine("区域:{0}不存在,创建失败", ContainerName);
return false;
}
if (IsExistsAType(ContainerName, OwnerName))
{
Console.WriteLine("{0}中已存在{1},创建失败", ContainerName, OwnerName);
return false;
}
MI = DnsClass.GetMethodParameters("CreateInstanceFromPropertyData");
MI["DnsServerName"] = "localhost";
MI["ContainerName"] = ContainerName;
MI["OwnerName"] = OwnerName;
MI["IPAddress"] = IPAddress;
MI["TTL"] = 3600;
DnsClass.InvokeMethod("CreateInstanceFromPropertyData", MI, null);
}
catch
{
}
return true;
}

/// <summary>
/// 创建MicrosoftDNS_AType
/// </summary>
/// <param name="DnsServerName">FQDN or IP address of the DNS Server that contains this RR</param>
/// <param name="ContainerName">Name of the Container for the Zone, Cache, or RootHints instance which contains this RR</param>
/// <param name="OwnerName">Owner name for the RR</param>
/// <param name="RecordClass">Class of the RR. Default value is 1. The following values are valid.1 IN (Internet) 2 CS (CSNET) 3 CH (CHAOS) 4 HS (Hesiod) </param>
/// <param name="TTL">Time, in seconds, that the RR can be cached by a DNS resolver</param>
/// <param name="IPAddress">String representing the IPv4 address of the host</param>
/// <returns></returns>
public bool CreateAType(string DnsServerName, string ContainerName, string OwnerName, uint RecordClass, uint TTL, string IPAddress)
{
try
{
this.Create("MicrosoftDNS_AType");
//如果区域不存在
if (!IsExistsZone(ContainerName))
{
Console.WriteLine("区域:{0}不存在,创建失败", ContainerName);
return false;
}
if (IsExistsAType(ContainerName, OwnerName))
{
Console.WriteLine("{0}中已存在{1},创建失败", ContainerName, OwnerName);
return false;
}
MI = DnsClass.GetMethodParameters("CreateInstanceFromPropertyData");
MI["DnsServerName"] = DnsServerName;
MI["ContainerName"] = ContainerName;
MI["OwnerName"] = OwnerName;
MI["RecordClass"] = RecordClass;
MI["TTL"] = TTL;
MI["IPAddress"] = IPAddress;
DnsClass.InvokeMethod("CreateInstanceFromPropertyData", MI, null);
return true;
}
catch
{
return false;
}

}

/// <summary>
/// 修改MicrosoftDNS_AType
/// </summary>
/// <param name="DnsServerName">FQDN or IP address of the DNS Server that contains this RR</param>
/// <param name="ContainerName">Name of the Container for the Zone, Cache, or RootHints instance which contains this RR</param>
/// <param name="OwnerName">Owner name for the RR</param>
/// <param name="TTL">Time, in seconds, that the RR can be cached by a DNS resolver</param>
/// <param name="IPAddress"></param>
/// <returns></returns>
public bool ModifyAType(string ContainerName, string OwnerName, string IPAddress)
{
try
{
Q = QueryDNS("Select * From MicrosoftDNS_AType where ContainerName='" + ContainerName + "' and OwnerName='" + OwnerName + "'", "MicrosoftDNS_AType");

foreach (ManagementObject oManObject in Q)
{
MI = oManObject.GetMethodParameters("Modify");
MI["IPAddress"] = IPAddress;
oManObject.InvokeMethod("Modify", MI, null);
return true;
}
return false;
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
return false;
}
}

/// <summary>
/// Made by yaosansi 2005.9 in n169.com
/// </summary>
/// <summary>
/// 修改MicrosoftDNS_AType
/// </summary>
/// <param name="ContainerName">Name of the Container for the Zone, Cache, or RootHints instance which contains this RR</param>
/// <param name="OwnerName">Owner name for the RR</param>
/// <param name="TTL">Time, in seconds, that the RR can be cached by a DNS resolver</param>
/// <param name="IPAddress"></param>
/// <returns></returns>
public bool ModifyAType(string ContainerName, string OwnerName, uint TTL, string IPAddress)
{
try
{
Q = QueryDNS("Select * From MicrosoftDNS_AType where ContainerName='" + ContainerName + "' and OwnerName='" + OwnerName + "'", "MicrosoftDNS_AType");

foreach (ManagementObject oManObject in Q)
{
MI = oManObject.GetMethodParameters("Modify");
MI["TTL"] = TTL;
MI["IPAddress"] = IPAddress;
oManObject.InvokeMethod("Modify", MI, null);
return true;
}
return false;
}
catch
{
return false;
}
}

/// <summary>
/// 删除MicrosoftDNS_AType
/// </summary>
/// <param name="ContainerName">Name of the Container for the Zone, Cache, or RootHints instance which contains this RR</param>
/// <param name="OwnerName">Owner name for the RR</param>
/// <returns></returns>
public bool DelAType(string ContainerName, string OwnerName)
{
try
{
Q = QueryDNS("Select * From MicrosoftDNS_AType where ContainerName='" + ContainerName + "' and OwnerName='" + OwnerName + "'", "MicrosoftDNS_AType");

foreach (ManagementObject oManObject in Q)
{
oManObject.Delete();
return true;
}
return false;
}
catch
{
return false;
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: