使用脚本更改DNS

使用脚本更改DNS

我需要经常更改 DNS 服务器地址,现在我通过打开“网络和共享中心” - “本地连接” - 属性 - ipv4 - 然后输入 DNS 数字来执行此操作。

有没有更快的方法?我可以用批处理文件或 powershell 脚本来做吗?是否有内置的控制台命令来更改 DNS?

答案1

主 DNS 值:

netsh interface ipv4 set dns "Local Area Connection" static 192.168.0.2

次要值:

netsh interface ipv4 add dns "Local Area Connection" 192.168.0.3 index=2

如果连接名称正确,则此方法有效。如果名称不是“本地连接”,则无法使用。如果您运行的是 XP,则需要将“ipv4”更改为“ip”。也可以使用 IPv6。

设置子网掩码、IP 地址和网关:

netsh interface ipv4 set address name="Local Area Connection" source=static addr=192.168.1.10 mask=255.255.255.0 gateway=192.168.0.1

要查找网络连接,您可以在 cmd 行中使用 ipconfig。但您也可以使用以下命令获得简化的 ipconfig 结果:

ipconfig | find /I "Ethernet adapter"

使用上面的 ipconfig cmd 我们可以循环遍历连接(源代码)并设置dns服务器:

:: Set primary and alternate DNS for IPv4 on Windows Server 2000/2003/2008 & 
:: Windows XP/Vista/7
@ECHO OFF
SETLOCAL EnableDelayedExpansion

SET adapterName=

FOR /F "tokens=* delims=:" %%a IN ('IPCONFIG ^| FIND /I "ETHERNET ADAPTER"') DO (
SET adapterName=%%a

REM Removes "Ethernet adapter" from the front of the adapter name
SET adapterName=!adapterName:~17!

REM Removes the colon from the end of the adapter name
SET adapterName=!adapterName:~0,-1!

netsh interface ipv4 set dns name="!adapterName!" static 192.168.0.2 primary
netsh interface ipv4 add dns name="!adapterName!" 192.168.0.3 index=2
)

ipconfig /flushdns

:EOF

答案2

还可以使用 DHCP 服务器提供的 DNS 地址:

netsh interface ipv4 set dns "Local Area Connection" dhcp

答案3

这是你的新朋友:快速设置DNS,由 NirSoft 制作,一如既往的精彩。

截屏

它也可以在命令行中使用:) 与 netsh 相比具有以下优势:

  • 更简单的语法,特别是设置备用服务器
  • 自动请求提升权限


仅需注意几点:

  • 仅支持IPv4的设置,不支持IPv6的设置。
    • 自 QuickSetDNS 1.30 起,还支持设置 IPv6 DNS 服务器;)
  • 在命令行中,应使用适配器 UUID,而不是友好名称(例如“本地连接”)
    • 自 QuickSetDNS 1.21 起,连接名称也受支持;)

答案4

其余所有答案都使用 netsh,至少在我今天早上使用的 Windows 2012R2 机器上报告:

In future versions of Windows, Microsoft might remove the Netsh functionality for TCP/IP.

Microsoft recommends that you transition to Windows PowerShell if you currently use netsh to configure and manage TCP/IP.

...现在,我确信这种情况不会很快发生,但是...它仍然让我去检查 Powershell。

这是我采用的 powershell 路线,假设只有一个物理接口。如果你有更多接口,你需要考虑选择正确的接口 :)

$interface = (Get-NetAdapter).ifIndex
Set-DnsClient -InterfaceIndex $interface -ConnectionSpecificSuffix myproject.mydomain.tld
Set-DnsClientServerAddress -InterfaceIndex $interface -ServerAddresses ("8.8.8.8","8.8.4.4","2001:4860:4860::8888","2001:4860:4860::8844")

相关文件(截至2020-05-15)如下:

相关内容