เปลี่ยน DNS ด้วยสคริปต์


29

ฉันต้องเปลี่ยนที่อยู่เซิร์ฟเวอร์ DNS บ่อยครั้งและตอนนี้ฉันทำได้โดยการเปิด 'เครือข่ายและศูนย์แบ่งปัน' - 'การเชื่อมต่อเครือข่ายท้องถิ่น' - คุณสมบัติ - ipv4 - จากนั้นพิมพ์หมายเลข DNS

มีวิธีที่เร็วกว่าที่จะทำหรือไม่ ฉันสามารถใช้ไฟล์แบตช์หรือสคริปต์ PowerShell ได้หรือไม่? มีคำสั่งในตัวคอนโซลเพื่อเปลี่ยน DNS หรือไม่

คำตอบ:


38

ค่า 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

ซึ่งใช้งานได้ดีมากถ้าชื่อของการเชื่อมต่อนั้นถูกต้อง หากชื่อนั้นไม่ใช่ "Local Area Connection" ก็จะไม่ทำงาน หากคุณใช้ XP คุณต้องเปลี่ยน "ipv4" เป็น "ip" สามารถใช้ IPv6 ได้เช่นกัน

ตั้งค่า subnet mask, ที่อยู่ 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

หากต้องการค้นหาการเชื่อมต่อเครือข่ายคุณสามารถใช้ ipconfig จากบรรทัด cmd แต่คุณยังสามารถใช้สิ่งต่อไปนี้สำหรับผลลัพธ์ ipconfig แบบย่อ:

ipconfig | find /I "Ethernet adapter"

ใช้ ipconfig ข้างต้นเราสามารถวนรอบการเชื่อมต่อ ( ซอร์สโค้ด ) และตั้งค่าเซิร์ฟเวอร์ 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

3
คำตอบที่ยอดเยี่ยม คุณควรใส่แหล่งที่มาของสิ่งต่าง ๆ เช่น Quotes และ Code
Ƭᴇcʜιᴇ007

8

นอกจากนี้หากต้องการใช้ที่อยู่ DNS ที่เซิร์ฟเวอร์ DHCP จัดหาให้:

netsh interface ipv4 set dns "Local Area Connection" dhcp

รวมทั้งในกรณีที่คุณต้องการรีเซ็ตที่อยู่ / มาสก์ / เกตเวย์เป็นของ DHCP: อินเทอร์เฟซ netsh ipv4 ชื่อที่อยู่ชุด = "การเชื่อมต่อเครือข่ายท้องถิ่น" แหล่งที่มา = dhcp
hello_earth

6

การใช้สคริปต์Powershellใน Windows 8 หรือ 2012 คุณสามารถตั้งค่าดังนี้:

Set-DnsClientServerAddress -InterfaceAlias Wi-Fi -ServerAddresses "1.1.1.1","2.2.2.2"

โดยที่wi-Fiเป็นชื่อของส่วนต่อประสานที่คุณสนใจคุณสามารถแสดงรายการส่วนต่อประสานได้โดยเรียกใช้:

Get-NetAdapter

หากต้องการรีเซ็ตที่อยู่ DNS และใช้ DHCP:

Set-DnsClientServerAddress -InterfaceAlias wi-fi -ResetServerAddresses

ไปที่หน้านี้เพื่อดูคำอธิบายแบบเต็ม

โปรดทราบว่า comandlets ที่ใช้ที่นี่ไม่สามารถใช้ได้ในรุ่นก่อนหน้าเช่น Windows 7


กระชับทำงานเหมือนมีเสน่ห์ ขอบคุณ :) มีประโยชน์อย่างยิ่งสำหรับ AWS Opsworks!
Ganesh Hegde

3

นี่คือเพื่อนใหม่ของคุณ: QuickSetDNSโดย NirSoft น่าทึ่งเหมือนเคย

ภาพหน้าจอ

มันยังสามารถใช้ใน command line :) ด้วยข้อดีเหล่านี้ผ่าน netsh:

  • ไวยากรณ์ง่ายขึ้นโดยเฉพาะการตั้งค่าเซิร์ฟเวอร์ทางเลือก
  • ถามระดับสิทธิ์โดยอัตโนมัติ


เพียงไม่กี่ประการ:

  • รองรับเฉพาะการตั้งค่า IPv4 ไม่ใช่ของ IPv6
  • ในบรรทัดคำสั่งควรใช้อะแดปเตอร์ UUID ไม่ใช่ชื่อที่เข้าใจง่าย (เช่น "การเชื่อมต่อเครือข่ายท้องถิ่น") ตั้งแต่ QuickSetDNS 1.21 สนับสนุนชื่อการเชื่อมต่อด้วย;)

นี่คือตัวอย่างโอเพนซอร์ซที่ใช้วิธีการเดียวกันกับข้างบน: codeproject.com/Articles/20639/…
Top-Master

1

การเพิ่มโปรแกรมแก้ไขไปยังรุ่น Logman สำหรับ WinXP (ภาษาฮิบรู sp3) ดูเหมือนว่าจะต้องลบ 2 ตัวอักษรในตอนท้ายเพื่อเพิ่มการแก้ไข "ทั่วโลก" สำหรับกรณีแปลก ๆ

:: 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 WinXP Remove some weird trailing chars (don't know what they are)
FOR /l %%a IN (1,1,255) DO IF NOT "!adapterName:~-1!"==":" SET adapterName=!adapterName:~0,-1!

REM Removes the colon from the end of the adapter name
SET adapterName=!adapterName:~0,-1!
echo !adapterName!
GOTO:EOF
netsh interface ip set dns name="!adapterName!" static x.x.x.x primary
netsh interface ip add dns name="!adapterName!" x.x.x.x index=2
)

http://pastebin.com/9mbMR7sy


0

คำตอบนี้จะถูกคัดลอกจาก XP1 ที่นี่ หาก XP1 ต้องการโพสต์คำตอบนี้โปรดทำแล้วฉันจะลบคำตอบของฉัน

นี่เป็นอีกวิธีหนึ่งในการเปลี่ยน DNS โดยใช้ WMIC (บรรทัดคำสั่งเครื่องมือจัดการ Windows)

คำสั่งจะต้องถูกเรียกใช้ในฐานะผู้ดูแลระบบเพื่อนำไปใช้

ล้างเซิร์ฟเวอร์ DNS:

wmic nicconfig where (IPEnabled=TRUE) call SetDNSServerSearchOrder ()

ตั้งค่า 1 เซิร์ฟเวอร์ DNS:

wmic nicconfig where (IPEnabled=TRUE) call SetDNSServerSearchOrder ("8.8.8.8")

ตั้งค่า 2 เซิร์ฟเวอร์ DNS:

wmic nicconfig where (IPEnabled=TRUE) call SetDNSServerSearchOrder ("8.8.8.8", "8.8.4.4")

ตั้งค่าเซิร์ฟเวอร์ DNS 2 ตัวบนอะแดปเตอร์เครือข่ายเฉพาะ:

wmic nicconfig where "(IPEnabled=TRUE) and (Description = 'Local Area Connection')" call SetDNSServerSearchOrder ("8.8.8.8", "8.8.4.4")

อีกตัวอย่างสำหรับการตั้งค่ารายการค้นหาโดเมน:

wmic nicconfig call SetDNSSuffixSearchOrder ("domain.tld")
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.