I was recently asked how to change the DNS server IP’s in the NIC configurations of numerous servers, which of course have static IP’s. Sounds simple right? Maybe not.
- You can use Group Policy to do so but apparently it will not work with all O/S’s and it will only work if DNS is working.
- You can deploy a script but that requires logon or reboot to apply.
- You use psexec and a text file list of servers with something similar to: “psexec @textfilename netsh interface ip set dns name = “Local Area Connection” source = static addr = 1.1.1.1” however it requires the NIC name be accurate and it is not always named “Local Area Connection”
One proposed great solution is to use a VBS script by Alexxxandre K8L0 on TechNet. This uses a text file list of server names or IP’s and updates each in the list. The article can be found in the following link, but since occasionally the links change or articles ‘disappear’ I have posted the content here, but I take no credit for its design: http://gallery.technet.microsoft.com/scriptcenter/Change-fixed-DNS-IP-of-422415c1
Syntax: cscript SetDNSv2.vbs inputfile outputfile dns_ips
Input file: Put IP or Hostname of server line by line on a text file.
Output file: Is a log of return status “Inputed,Host,Adapter,Return Status”
dns_ips: Ips of DNS Servers separated by commas.
Example: cscript SetDNSv2.vbs inputfile.txt outputfile.txt 10.1.0.10,10.1.0.11,10.1.0.10
‘Set DNS By k8l0
‘By k8l0
If WScript.Arguments.Count = 3 Then
strInputFile = WScript.Arguments.Item(0)
strOutputFile = WScript.Arguments.Item(1)
strNewDNS = WScript.Arguments.Item(2)
Else
wscript.echo “Sintaxe: cscript SetDNSv2.vbs inputfile.txt outputfile.txt 10.1.98.64,10.1.98.36,10.1.18.24”
wscript.quit
end if
On error resume next
Const ForReading = 1
Const ForAppending = 8
Set objFSO = CreateObject(“Scripting.FileSystemObject”)
Set objTextFileIn = objFSO.OpenTextFile(strInputFile, ForReading)
Set objTextFileOut = objFSO.OpenTextFile(strOutputFile, ForAppending, True)
wscript.echo “Host Adapter Return Status”
wscript.echo “—- ——- ————-”
objTextFileOut.WriteLine(“Inputed,Host,Adapter,Return Status”)
Do Until objTextFileIn.AtEndOfStream
strComputer = Trim(objTextFileIn.Readline)
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
strReturn = “”
arrNewDNSServerSearchOrder = Split(strNewDNS,”,”)
intSetDNSServers = objNicConfig.SetDNSServerSearchOrder(arrNewDNSServerSearchOrder)
If intSetDNSServers = 0 Then
strReturn = “””” & “Replaced DNS server search order list to ” & strNewDNS & “.” & “”””
Else
strReturn = “Unable to replace DNS server search order list.”
End If
Else
strReturn = “DNS server search order is null. Nothing changed!”
End If
strDNSHostName = objNicConfig.DNSHostName
strIndex = objNicConfig.Index
strDescription = objNicConfig.Description
strAdapter = “Network Adapter ” & strIndex & ” – ” & strDescription
wscript.echo strDNSHostName & VBTab & strAdapter & VBTab & strReturn
objTextFileOut.WriteLine(strComputer & “,” & strDNSHostName & “,” & strAdapter & “,” & strReturn)
Next
Loop
objTextFileIn.close
objTextFileOut.close
wscript.echo “Finished!!!”
Comments on: "Remotely change DNS server IP’s" (1)
hello there and thank you for your information – I’ve definitely picked up something new from right here.