开发者

Manage DNS server by C# code

I need some sample code to create/delete zone and A record in microsof开发者_StackOverflowt DNS server by C#


You have to use WMI to invoke the DNSProvider.

This to add a record:

 public void AddARecord(string hostName, string zone, string iPAddress, string dnsServerName)
 {
      ManagementScope scope = 
         new ManagementScope(@"\\" + dnsServerName + "\\root\\MicrosoftDNS");

      scope.Connect();

      ManagementClass cmiClass =
         new ManagementClass(scope, 
                             new ManagementPath("MicrosoftDNS_AType"),
                             null);

     ManagementBaseObject inParams = 
         cmiClass.GetMethodParameters("CreateInstanceFromPropertyData");

     inParams["DnsServerName"] = this.ServerName;
     inParams["ContainerName"] = zone;
     inParams["OwnerName"] = hostName + "." + zone;
     inParams["IPAddress"] = iPAddress;

     cmiClass.InvokeMethod("CreateInstanceFromPropertyData", inParams, null);
}

You can reference the WMI reference and extend this as you need using the methods and classes http://msdn.microsoft.com/en-us/library/ms682123(v=vs.85).aspx


Microsoft exposes it as a POX service, so you could just push XML over the wire to it, using the System.Net stuff & your user credentials.

http://technet.microsoft.com/en-us/library/dd278634.aspx


I agreed with Taylor but in my case i have got 2 different error with above code 1- Generic Error 2- Not Found error

Below code has solved this problems

private ManagementPath UpdateARecord(string strDNSZone, string strHostName, string strIPAddress)
        {
            ManagementScope mgmtScope = new ManagementScope(@"\\.\Root\MicrosoftDNS");
            ManagementClass mgmtClass = null;
            ManagementBaseObject mgmtParams = null;
            ManagementObjectSearcher mgmtSearch = null;
            ManagementObjectCollection mgmtDNSRecords = null;
            string strQuery;

            strQuery = string.Format("SELECT * FROM MicrosoftDNS_AType WHERE OwnerName = '{0}.{1}'", strHostName, strDNSZone);

            mgmtScope.Connect();

            mgmtSearch = new ManagementObjectSearcher(mgmtScope, new ObjectQuery(strQuery));

            mgmtDNSRecords = mgmtSearch.Get();

            //// Multiple A records with the same record name, but different IPv4 addresses, skip.
            //if (mgmtDNSRecords.Count > 1)
            //{
            //    // Take appropriate action here.
            //}
            //// Existing A record found, update record.
            //else
            if (mgmtDNSRecords.Count == 1)
            {
                ManagementObject mo = new ManagementObject();
                foreach (ManagementObject mgmtDNSRecord in mgmtDNSRecords)
                {
                    if (mgmtDNSRecord["RecordData"].ToString() != strIPAddress)
                    {
                        mgmtParams = mgmtDNSRecord.GetMethodParameters("Modify");
                        mgmtParams["IPAddress"] = strIPAddress;

                        mgmtDNSRecord.InvokeMethod("Modify", mgmtParams, null);
                    }
                    mo = mgmtDNSRecord;
                    break;
                }

                return new ManagementPath(mo["RR"].ToString());
            }
            // A record does not exist, create new record.
            else
            {
                mgmtClass = new ManagementClass(mgmtScope, new ManagementPath("MicrosoftDNS_AType"), null);

                mgmtParams = mgmtClass.GetMethodParameters("CreateInstanceFromPropertyData");
                mgmtParams["DnsServerName"] = Environment.MachineName;
                mgmtParams["ContainerName"] = strDNSZone;
                mgmtParams["OwnerName"] = strDNSZone;// string.Format("{0}.{1}", strHostName.ToLower(), strDNSZone);

                mgmtParams["IPAddress"] = strIPAddress;

                var outParams = mgmtClass.InvokeMethod("CreateInstanceFromPropertyData", mgmtParams, null);

                if ((outParams.Properties["RR"] != null))
                {
                    return new ManagementPath(outParams["RR"].ToString());
                }
            }

            return null;
        }
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜