Zmień DNS za pomocą skryptu

29

Muszę często zmieniać adres serwera DNS, a na razie robię to, otwierając „centrum sieci i udostępniania” - „połączenie lokalne” - właściwości - ipv4 - a następnie wpisując numery DNS.

Czy jest na to szybszy sposób? Czy mogę to zrobić za pomocą pliku wsadowego lub skryptu PowerShell? Czy jest wbudowane polecenie konsoli do zmiany DNS?

Endy Tjahjono
źródło

Odpowiedzi:

38

Podstawowa wartość DNS:

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

Wartość wtórna:

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

Co działa świetnie, jeśli nazwa połączenia jest poprawna. Jeśli nazwa nie brzmi „Połączenie lokalne”, to nie będzie działać. Jeśli używasz XP, musisz zmienić „ipv4” na „ip”. Można również użyć IPv6.

Ustaw maskę podsieci, adres IP i bramę:

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

Aby znaleźć połączenie sieciowe, możesz użyć ipconfig z linii cmd. Ale możesz również użyć następującego skróconego wyniku ipconfig:

ipconfig | find /I "Ethernet adapter"

za pomocą powyższego polecenia ipconfig cmd możemy zapętlić połączenie ( kod źródłowy ) i ustawić serwery 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
Logman
źródło
3
Doskonała odpowiedź. Powinieneś dołączyć źródła takich rzeczy jak Cytaty i Kod.
ᴇcʜιᴇ007
8

Aby również użyć adresów DNS dostarczonych przez serwer DHCP:

netsh interface ipv4 set dns "Local Area Connection" dhcp
mmm
źródło
oraz w przypadku, gdy chcesz, aby zresetować adres / maska / brama do tych z DHCP: netsh interface ipv4 nazwy zestaw address = „Połączenie lokalne” source = dhcp
hello_earth
6

Korzystając ze skryptu Powershell w systemie Windows 8 lub 2012, możesz ustawić następujące wartości:

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

Gdzie Wi-Fi to nazwa interfejsu, który Cię interesuje. Możesz wyświetlić listę interfejsów, uruchamiając:

Get-NetAdapter

Aby zresetować adresy DNS i użyj DHCP:

Set-DnsClientServerAddress -InterfaceAlias wi-fi -ResetServerAddresses

Przejdź do tej strony, aby zobaczyć pełny opis.

Pamiętaj, że użyte tutaj komandlety nie są dostępne we wcześniejszych wersjach, takich jak Windows 7.

Juanal
źródło
zwięzłe, działa jak urok. Dziękujemy :) Szczególnie przydatne w AWS Opsworks!
Ganesh Hegde,
3

Oto twój nowy przyjaciel: QuickSetDNS , NirSoft, niesamowity jak zwykle.

zrzut ekranu

Można go również używać w wierszu poleceń :) z tymi zaletami w stosunku do netsh:

  • łatwiejsza składnia, w szczególności do ustawiania alternatywnego serwera
  • automatycznie prosi o podniesienie uprawnień


Kilka ostrzeżeń:

  • obsługuje tylko ustawienia IPv4, a nie IPv6
  • w wierszu poleceń należy użyć identyfikatora UUID adaptera, a nie przyjaznej nazwy (np. „Połączenie lokalne”) od QuickSetDNS 1.21 obsługiwane są również nazwy połączeń;)
Gras Double
źródło
Oto przykład open-source, który wykorzystuje to samo podejście jak powyżej: codeproject.com/Articles/20639/…
Top-Master
1

Dodanie poprawki do wersji Logmana dla WinXP (hebrajski sp3) wydaje się, że trzeba usunąć 2 znaki na końcu, więc dodano poprawkę „globalną” dla każdego innego dziwnego przypadku.

:: 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

Sniffleh
źródło
0

Ta odpowiedź została skopiowana z XP1 tutaj . Jeśli XP1 chce opublikować tę odpowiedź, zrób to, a ja usunę moją odpowiedź.

Oto inny sposób zmiany DNS za pomocą WMIC (wiersz poleceń Instrumentacji zarządzania Windows).

Aby zastosować, polecenia muszą być uruchomione jako administrator.

Wyczyść serwery DNS:

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

Ustaw 1 serwer DNS:

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

Ustaw 2 serwery DNS:

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

Ustaw 2 serwery DNS na konkretnej karcie sieciowej:

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

Kolejny przykład ustawienia listy wyszukiwania domen:

wmic nicconfig call SetDNSSuffixSearchOrder ("domain.tld")
Nathan
źródło