自动更改(可能)多个DNS服务器

时间:2013-06-27 15:20:49

标签: scripting vbscript dns

我有一个脚本,它利用VBScript识别运行它的机器的DNS。如果我正在寻找正在使用的DNS,我会提醒我。我希望更进一步,如果找到指定的DNS,将该特定的DNS更改为另一个DNS。我发现了一些似乎是基本想法的脚本,但我不认为它们会替换已识别的脚本,只是位于列表顶部的脚本。

这是我的VBScript,用于标识指定的DNS:

'Bind to Shell
Set objShell = WScript.CreateObject("WScript.Shell")

'Read Servers NetbiosName
'strComputer = objShell.RegRead("HKLM\SYSTEM\CurrentControlSet\Control\ComputerName\ActiveComputerName\ComputerName")

strComputer = "."
wscript.echo strComputer

Set objWMIService = GetObject("winmgmts:" _
 & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colNicConfigs = objWMIService.ExecQuery _
 ("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = True")

For Each objNicConfig In colNicConfigs
    If Not IsNull(objNicConfig.DNSServerSearchOrder) Then
        For Each strDNSServer In objNicConfig.DNSServerSearchOrder
            if strDNSServer = "8.8.8.8" Then
                wscript.echo "Works!"
            End if
            wscript.echo strDNSServer
        Next
    End If
Next

为了澄清,我需要帮助的部分是脚本打印出“作品”的地方。我希望特别将DNS更改为另一个指定的DNS。

这里有一些代码我也发现声称要更改DNS,但我担心如果我将其插入那里它只会​​将DNS更改为列表顶部的DNS,而不是我已识别的DNS:

Set objShell = WScript.CreateObject("Wscript.Shell")
objShell.Run "netsh interface ip set address name=""Local Area Connection"" static " & strIPAddress & " " & strSubnetMask & " " & strGateway & " " & intGatewayMetric, 0, True

如果我能澄清任何事情,请告诉我!提前谢谢!

1 个答案:

答案 0 :(得分:1)

您可以使用SetDNSServerSearchOrder方法设置DNS服务器(有关示例,请参阅here)。但是,该方法需要一个包含您要使用的所有DNS服务器的阵列,因此您需要将当前的DNS服务器读入一个数组,修改要更改的地址,然后使用修改后的SetDNSServerSearchOrder调用阵列。

If Not IsNull(objNicConfig.DNSServerSearchOrder) Then
  dns = objNicConfig.DNSServerSearchOrder
  For i = 0 To UBound(dns)
    if dns(i) = "8.8.8.8" Then dns(i) = "4.4.4.4"
  Next
  objNicConfig.SetDNSServerSearchOrder(dns)
End If