2010-09-03 54 views

回答

2

我用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; 
    } 
0

我不認爲.NET有任何東西可以提供對這些的訪問(我可以在一些快速搜索中找到對專有庫,控件等的引用),因此您可能必須使用Win32 API通過P/Invoke(儘管另一種可能性是通過WMI來完成這項工作)。

你會先DnsAcquireContextHandle開始,然後(可能)DnsQuery得到一個當前記錄集,修改其內容並加入新的別名,DnsReplaceRecordSet有DNS服務器使用新的記錄集,最後DnsReleaseContextHandle關閉事情下降。

當然,您需要在服務器上擁有正確的權限,否則這些權限都不起作用。

相關問題