所以我正在尝试更新Microsoft DNS服务器的数据库中的所有IP地址,这是我的代码
internal bool UpdateIPFromDns(string oldIP, string newIP)
{
try
{
string Query = ("SELECT * FROM MicrosoftDNS_AType WHERE RecordData = '" + oldIP + "'");
ManagementObjectSearcher s = new ManagementObjectSearcher(_scope, new ObjectQuery(Query));
ManagementObjectCollection col = s.Get();
foreach (ManagementObject wmiZone in col)
{
Console.WriteLine("Updating: " + (String)wmiZone.Properties["OwnerName"].Value + " To -> " + newIP);
ManagementBaseObject mgmtParams = null;
mgmtParams = wmiZone.GetMethodParameters("Modify");
mgmtParams["IPAddress"] = newIP;
wmiZone.InvokeMethod("Modify", mgmtParams, null);
}
return true;
}
catch (Exception ex)
{
Console.WriteLine("error: " + ex);
return false;
}
}
因为有时似乎工作正常,有时它会打印出它更新了项目(就像它应该的那样),但是当我刷新数据库本身它实际上已经删除了所有这些项目,我不知道为什么它正在这样做。
编辑:
好的,所以我在删除项目时已经解决了
所以在数据库中我们从
开始Example.com->
example.com 1.1.1.1
t1.example.com 1.1.1.1
t2.example.com 2.3.4.5
test.com->
test.com 1.1.1.1
t1.test.com 2.3.4.5
t2.test.com 1.1.1.1
如果我在1.1.1.1上运行更新并将其更新到2.3.4.5它会更新,所以现在数据库看起来像这样
Example.com->
example.com 2.3.4.5
t1.example.com 2.3.4.5
t2.example.com 2.3.4.5
test.com->
test.com 2.3.4.5
t1.test.com 2.3.4.5
t2.test.com 2.3.4.5
现在如果我再次运行它将2.3.4.5更新为2.3.4.5然后删除所有使用IP 2.3.4.5的项目
但我不确定为什么会这样做
P.S我对WMI不是很有经验,所以如果我在那里做错了,请告诉我
答案 0 :(得分:1)
因此,每个Microsoft的实现完全按照他们的编程方式执行:https://support.microsoft.com/en-us/kb/979609。 (我有一种感觉,服务器做了一些奇怪的事情,并且你有正确的WMI)。所以你现在可能已经构建了这个,但如果旧地址等于新地址,你需要跳过更新。鉴于WMI相当昂贵,无论如何这都是个好主意。