用于修改 DNS IP 地址的 VB Shell 脚本

清华大佬耗费三个月吐血整理的几百G的资源,免费分享!....>>>

' This script changes the DNS servers for a network device in Windows
' to a defined IP or deletes them and makes it the default automatic

' Test if in admin mode by detecting 'elevated' in the command line that launched this script
' WScript is basically a THIS script object

If WScript.Arguments.Named.Exists("elevated") = False Then
	'Launch this script again as administrator
	CreateObject _
	 ("Shell.Application").ShellExecute _
	 	"wscript.exe", """" & WScript.ScriptFullName & """ /elevated", "", "runas", 1
	WScript.Quit
Else
	'Change the working directory from the system32 folder back to the script's folder.
	Set oShell = CreateObject("WScript.Shell")
	oShell.CurrentDirectory = CreateObject _
		("Scripting.FileSystemObject").GetParentFolderName(WScript.ScriptFullName)
	'MsgBox "Now running with elevated permissions"
End If

' Define the DNS Primary and secondary server IPs 
DNSserv = "111.111.111.111,222.222.222.222"

' Ask if the DNS servers should be set or removed
iAction = MsgBox("Would you like to use DNS?", _
		vbYesNoCancel+vbQuestion+vbApplicationModal, "DNS Toggle: " & DNSserv)

' Cancel was selected - quit this script
If vbCancel = iAction Then
	WScript.Quit
End If

strComputer = "." ' This computer

' Get the Script shell and WMI Service objects
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set WshShell = WScript.CreateObject("WScript.Shell")

' The registry key that hold the TCP/IP parameters
Regkey = "HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\services\Tcpip\Parameters\Interfaces\"

' Enumerate all of the enabled network devices
Set IPDevSet = objWMIService.ExecQuery _
("Select SettingID from Win32_NetworkAdapterConfiguration where IPEnabled=TRUE")

DNSservRead = ""

For Each IPDev in IPDevSet
	' Get the current setting 
	DNSservRead = WshShell.RegRead _
		( Regkey & IPDev.SettingID & "\NameServer")
	'MsgBox "DNS Servers was set to:"  & vbCrLf & DNSservRead, vbOK, "Old Status"

	' if it's blank and the user chose YES set it to the DNS Server values.
	' So we don't overwrite the values that are already set 
	If "" = DNSservRead and vbYes = iAction Then 
		'Combine regkey, settingID, and nameserver to create the correct registry key path
		WshShell.RegWrite Regkey & IPDev.SettingID & "\NameServer", DNSserv, "REG_SZ"
		
	' If the user selected NO to delete the DNS values this script sets 
	' and it's not set to those DNS values do not mess with it.
	ElseIf DNSservRead = DNSServ and vbNo = iAction Then 
		WshShell.RegWrite Regkey & IPDev.SettingID & "\NameServer", "", "REG_SZ"
	End If

   	' See the new setting
	'DNSservRead = WshShell.RegRead( Regkey & IPDev.SettingID & "\NameServer")
	'MsgBox "DNS Servers now set to:"  & vbCrLf & DNSservRead, vbOK, "New Status"
Next

'Final message
szTitle = ""
szMssg = ""
If vbYes = iAction Then 
	szMssg = "DNS Servers now set to use:" & vbCrLf & " " & DNSserv
	szTitle = "DNS.com is ON"
Else
	szMssg = "DNS Servers deleted."& vbCrLf & "Now set to Automatic"
	szTitle = "DNS.com is OFF"
End If

MsgBox szMssg, vbInformation, szTitle