如何通过编程方式删除DNS域名?

7

我正在构建一个用于管理DNS服务器的C# Web应用程序,使用WMI命名空间来完成所有操作。唯一困扰我的问题是删除DNS域。以下是我的代码:

internal static bool DeleteDomainFromDns(string DnsServerName, string ContainerName, string Name)
    {
        try
        {
            string Query = "SELECT * FROM MicrosoftDNS_Domain WHERE DnsServerName = '" + DnsServerName + "' AND ContainerName = '" + ContainerName + "' AND Name = '" + Name + "'";
            ObjectQuery qry = new ObjectQuery(Query);
            DnsProvider dns = new DnsProvider();
            ManagementObjectSearcher s = new ManagementObjectSearcher(dns.Session, qry);
            ManagementObjectCollection col = s.Get();
            dns.Dispose();

            foreach (ManagementObject obj in col)
            {
                obj.Delete(); //Exception occurs here
            }
            return true;
        }
        catch (Exception)
        {
            return false;
        }
    }

我遇到的错误是:“ManagementException was caught "Generic Failure"。”我在网上看到有人使用区域命名空间删除域,但这仅适用于要删除的域本身就是区域的情况。我需要删除不是区域的域。有谁能帮忙吗?

你确定你可以在迭代之前处理掉 DnsProvider 实例吗? - leppie
是的,有两个原因。我不会在那个点之后使用它,而且这是我所有DNS删除方法的做法。 - mcass20
2个回答

2

我尚未找到使用WMI删除域的方法,并且还查阅了名为DNSShell的Powershell插件,但似乎没有删除域的命令。


@RJ:虽然我不太愿意接受你的答案,但看起来你离正确答案最近。 - mcass20

1

您可以尝试使用来自删除资源记录的脚本DnsResource.vbs。它仅使用DNS WMI提供程序。因此,如果它适用于您的目的,您可以在C#程序中执行相同操作。

您还可以考虑使用DnsModifyRecordsInSet。在Windows SDK(C:\Program Files\Microsoft SDKs\Windows\v7.1\Samples\netds\dns\modifyrecords)中,您可以找到一个C++示例,它使用DnsModifyRecordsInSet。它演示了如何在DNS中添加记录。如果您使用第二个参数pDeleteRecords而不是第一个pAddRecords,则可以删除DNS中的任何记录。


谢谢您的尝试,但我没有问题删除资源记录。 我在删除域时遇到问题。 - mcass20
再次感谢您的见解,但是删除域中的记录并不会删除域容器本身,这正是我在这里想要的。 - mcass20

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接