【发布时间】:2010-09-03 02:04:58
【问题描述】:
我想在 Microsoft 的 DNS 服务器中创建一个别名记录,以将 AliasA 指向 ComputerA。如何以编程方式执行此操作?
【问题讨论】:
我想在 Microsoft 的 DNS 服务器中创建一个别名记录,以将 AliasA 指向 ComputerA。如何以编程方式执行此操作?
【问题讨论】:
我使用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;
}
【讨论】:
con 未定义。 System.Management.ConnectionOptions你在那里设置了哪些参数? msdn.microsoft.com/de-de/library/…
我认为 .NET 没有任何东西可以提供对这些的访问(我可以通过一些快速搜索找到对专有库、控件等的引用),因此您可能必须使用 Win32 API 通过 P/Invoke(虽然另一种可能性是通过 WMI 完成工作)。
您将从DnsAcquireContextHandle 开始,然后(可能)DnsQuery 获取当前记录集,修改其内容以添加您的新别名,DnsReplaceRecordSet 让 DNS 服务器使用新记录集,最后DnsReleaseContextHandle 关闭。
当然,您需要在服务器上获得正确的权限,否则这些都不起作用。
【讨论】: