![使用脚本更改DNS](https://linux22.com/image/1326236/%E4%BD%BF%E7%94%A8%E8%84%9A%E6%9C%AC%E6%9B%B4%E6%94%B9DNS.png)
我需要经常更改 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)如下: