使用腳本更改 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年5月15日)為:

相關內容