如何以编程方式添加DNS别名?
答
我用WMI来做到这一点,在网上找到了一个例子,这就是它的样子。
private ManagementScope _session = null;
public ManagementPath CreateCNameRecord(string DnsServerName, string ContainerName, string OwnerName, string PrimaryName)
{
_session = new ManagementScope("\\\\" + DnsServerName+ "\\root\\MicrosoftDNS", con);
_session.Connect();
ManagementClass zoneObj = new ManagementClass(_session, new ManagementPath("MicrosoftDNS_CNAMEType"), null);
ManagementBaseObject inParams = zoneObj.GetMethodParameters("CreateInstanceFromPropertyData");
inParams["DnsServerName"] = ((System.String)(DnsServerName));
inParams["ContainerName"] = ((System.String)(ContainerName));
inParams["OwnerName"] = ((System.String)(OwnerName));
inParams["PrimaryName"] = ((System.String)(PrimaryName));
ManagementBaseObject outParams = zoneObj.InvokeMethod("CreateInstanceFromPropertyData", inParams, null);
if ((outParams.Properties["RR"] != null))
{
return new ManagementPath(outParams["RR"].ToString());
}
return null;
}
答
我不认为.NET有任何东西可以提供对这些的访问(我可以在一些快速搜索中找到对专有库,控件等的引用),因此您可能必须使用Win32 API通过P/Invoke(尽管另一种可能性是通过WMI来完成这项工作)。
你会先DnsAcquireContextHandle
开始,然后(可能)DnsQuery
得到一个当前记录集,修改其内容并加入新的别名,DnsReplaceRecordSet
有DNS服务器使用新的记录集,最后DnsReleaseContextHandle
关闭事情下降。
当然,您需要在服务器上拥有正确的权限,否则这些权限都不起作用。