Skip to content

Instantly share code, notes, and snippets.

@halilim
Created September 1, 2013 14:11
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save halilim/6404688 to your computer and use it in GitHub Desktop.
Save halilim/6404688 to your computer and use it in GitHub Desktop.
Windows DNS Switcher - Switch your DNS resolvers for all network interfaces in Windows from command line.

Windows DNS Switcher

Changing DNS server addresses in Windows is quite a pain in the a**. This little script tries to help this a bit.

How to use

  • Copy the DNS-Switcher.jse file anywhere you like (can be somewhere in the D: drive if you don't want to lose it after the next format)
  • Preferably make a shortcut of it in the quick launch, desktop, or your choice of shortcut container
  • Right click the file and choose "Open in the command line" or something like it
  • Choose from the list
  • To cancel while the script is running, press Ctrl + C

Modification

  • You can add new servers to the array at the top. They will be available in the next run.
  • You can modify any part under the terms of GPL licence, but please contribute it back here.
/**
* Windows DNS Switcher - Don't wear out your mouse trying to change your DNS server adresses.
* @author Halil Ozgur
* @license GPL Licence
*/
var dnsler = [
["Empty (DHCP-Auto)", []],
["OpenDNS", ["208.67.222.222", "208.67.220.220"]],
["Google DNS", ["8.8.8.8", "8.8.4.4"]],
["Comodo Secure DNS", ["156.154.70.22", "156.154.71.22"]]
];
var Regkey = "HKLM\\SYSTEM\\CurrentControlSet\\Services\\Tcpip\\Parameters\\Interfaces\\";
var strComputer = ".";
var objWMIService = GetObject("winmgmts:\\\\" + strComputer + "\\root\\cimv2");
var WshShell = WScript.CreateObject("WScript.Shell")
var IPDevSet = objWMIService.ExecQuery("Select * from Win32_NetworkAdapterConfiguration where IPEnabled=TRUE");
function dnsLblAra(aDnsler)
{
for (var i = 0; i < dnsler.length; i++) {
if (aDnsler.join(', ') == dnsler[i][1].join(', ')) {
return dnsler[i][0];
}
}
return "";
}
function dnsFmt(aDnsler)
{
var ret = aDnsler.join(', ');
var dnsLbl = dnsLblAra(aDnsler);
if (dnsLbl != "") {
if (aDnsler.length == 0) {
ret += dnsLbl;
} else {
ret += " (" + dnsLbl + ")";
}
} else {
ret += "";
}
return ret;
}
function getItemDns(oItem)
{
if (oItem.DNSServerSearchOrder != null) {
return oItem.DNSServerSearchOrder.toArray();
} else {
return [];
}
}
WScript.Echo("Current DNS Servers :\n");
for (var enumerator = new Enumerator(IPDevSet); !enumerator.atEnd(); enumerator.moveNext()) {
var item = enumerator.item();
WScript.Echo(item.Caption + " :\n" + dnsFmt(getItemDns(item)) + "\n");
}
WScript.Echo("Please choose the new DNS server(s):");
var secim = null;
while (secim == null) {
for (var i = 0; i < dnsler.length; i++) {
WScript.Echo(i + " : " + dnsler[i][0]);
}
WScript.StdOut.Write(" > ");
secim = WScript.StdIn.ReadLine();
secim = parseInt(secim);
if (!dnsler[secim]) {
WScript.Echo("Invalid choice. Please try again.\n");
secim = null;
}
}
var secilenDNSler = dnsler[secim][1];
for (var enumerator = new Enumerator(IPDevSet) ; !enumerator.atEnd(); enumerator.moveNext()) {
var item = enumerator.item();
eskiDNSler = getItemDns(item);
var kod = item.SetDNSServerSearchOrder(Array(secilenDNSler[0], secilenDNSler[1]));
WScript.Echo(item.Caption + " :\n[" + kod + '] ' + dnsFmt(eskiDNSler) + " -> " + dnsFmt(secilenDNSler) + "\n");
}
WshShell.Exec("ipconfig /flushdns");
WScript.Echo("\"ipconfig /flushdns\" executed.");
WScript.Sleep(3750);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment