VBscript 以 NIC 的特定 IP 为目标并更改其 DNS 设置

VBscript to target specific IP of NIC and change its DNS settings

我目前的任务是编写一个脚本,该脚本将更改 15,000 个 ish 服务器的 DNS 设置。但是,除了它们当前的 DNS IP 之外,这些 NIC 没有共同的唯一标识符。我的问题是,是否有可能以某种方式让我的脚本执行 ipfonfig /all,然后如果 NIC 的其中一个报告返回当前 DNS 设置,目标是该 NIC 以获取新的更新设置?

我目前正在使用下面的脚本,直到我意识到某些 NIC 不会被调用 "Production"。欢迎任何建议! (powershell 不是一个选项,因为我们可能针对一些非常旧的服务器)

Dim strDns1
Dim strDns2

strDns1 = "10.10.10.10"
strDns2 = "10.10.10.10"

Set objShell = WScript.CreateObject("Wscript.Shell")
objShell.Run "netsh interface ip set dns name=""Production"" static "& strDns1, 0, True
objShell.Run "netsh interface ip add dns name=""Production"" addr="& strDns2, 0, True
Set objShell = Nothing
WScript.Quit

您可以使用如下脚本执行 ipconfig 查询:

Set wso = CreateObject("WScript.Shell") 

Set execo = wso.Exec("ipconfig /all")
Set stdout = execo.StdOut
While Not stdout.AtEndOfStream
    cmdOutput = cmdOutput & VbCrLf  & stdout.ReadLine
Wend

wscript.echo cmdOutput

主要问题是这只是一个字符串,所以你必须自己解析它,这很烦人而且可能容易出错。

我宁愿建议你看一下 wmi class

Win32_NetworkAdapterConfiguration

里面有很多关于网络连接的信息。此 WMI class 唯一需要注意的是,它将许多值存储在数组中而不是字符串中,因此您不能简单地查询所有内容。要么选择像 DNSDomain 这样的字符串来查询,要么只处理脚本中的逻辑。

我同意 Syberdoor ,你应该使用 Wmi Class

Win32_NetworkAdapterConfiguration

此代码为您提供了一些信息:

Call ListDNSInfo()
'********************************************************************
Sub ListDNSInfo()
    Dim ComputerName,IPConfigSet,IPConfig,BailObtenu,BailExpirant
    ComputerName="."
    On error resume next 
    set IPConfigSet = GetObject("winmgmts:{impersonationLevel=impersonate}!//" & ComputerName).ExecQuery _ 
    ("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled=TRUE") 
    If Err.Number <> 0 Then 
        wscript.echo " - non accessible -" 
    Else 
        for each IPConfig in IPConfigSet 
            BailObtenu = IPConfig.DHCPLeaseObtained
            BailExpirant = IPConfig.DHCPLeaseExpires
'---- Convertion des date et heure d'obtention et d'expiration des baux DHCP en un format lisible par l'utilisateur. ----
            BailObtenu = mid(BailObtenu, 7, 2) & "/" & mid(BailObtenu, 5, 2) & "/" & mid(BailObtenu, 1, 4) & " - " & mid(BailObtenu, 9, 2)& ":" & mid(BailObtenu, 11, 2)& ":" & mid(BailObtenu, 13, 2)
            BailExpirant = mid(BailExpirant, 7, 2) & "/" & mid(BailExpirant, 5, 2) & "/" & mid(BailExpirant, 1, 4) & " - " & mid(BailExpirant, 9, 2)& ":" & mid(BailExpirant, 11, 2)& ":" & mid(BailExpirant, 13, 2)

            MsgBox " Configuration réseau de l'ordinateur " & ComputerName & vbcrlf & vbcrlf & _ 
            "Nom Machine " & vbtab & " : " & IPConfig.DNSHostName & vbcrlf & _ 
            "Carte active" & vbtab & " : " & IPConfig.Description & vbcrlf & _ 
            "Adresse MAC " & vbtab & " : " & IPConfig.MACAddress & vbcrlf & _ 
            "DHCP Activé" & vbtab & " : " & IPConfig.DHCPEnabled & vbcrlf & _
            "Adresse IP " & vbtab & " : " & IPConfig.IPAddress(0) & vbcrlf & _
            "Masque " & vbtab & vbtab & " : " & IPConfig.IPSubnet(0) & vbcrlf & _
            "Passerelle     " & vbtab & " : " & IPConfig.DefaultIPGateway(0) & vbcrlf & _   
            "Serveur DHCP " & vbtab & " : " & IPConfig.DHCPServer & vbcrlf & vbcrlf & _
            "Serveur DNS " & vbtab & " : " & IPConfig.DNSServerSearchOrder(0) & vbcrlf & _
            "             " & vbtab & vbtab & " : " & IPConfig.DNSServerSearchOrder(1) & vbcrlf & _
            "Serveur WINS " & vbtab & " : " & IPConfig.WINSPrimaryServer(0) & vbcrlf & _
            "             " & vbtab & vbtab & " : " & IPConfig.WINSSecondaryServer(0) & vbcrlf & vbcrlf & _
            " Bail obtenu " & vbtab & " : " & BailObtenu & vbcrlf & _
            " Bail expirant " & vbtab & " : " & BailExpirant _                    
            ,VbInformation,"Configuration réseau de l'ordinateur " 
        Next 
    End If
End Sub