Перейти к содержимому

Изменить DNS с помощью скрипта

27

Мне нужно часто менять адрес DNS-сервера, и сейчас я делаю это, открывая «сеть и центр общего доступа» - «подключение по локальной сети» - свойства - ipv4 - и затем набираю номера DNS.

Есть ли более быстрый способ сделать это? Могу ли я сделать это с помощью командного файла или сценария PowerShell? Есть ли встроенная консольная команда для изменения DNS?

104 299 просмотров
Endy Tjahjono спросил 14 лет назад
E 692

6 ответов

36
Принятый ответ

Основное значение 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 

Чтобы найти сетевое соединение, вы можете использовать ipconfig из строки cmd. Но вы также можете использовать следующее для сокращенного результата 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 

Отличный ответ. Вы должны включить sources для таких вещей, как цитаты и код.

Ƭᴇcʜιᴇ007 · 14 лет назад · 2
Logman ответил 14 лет назад
L 3 267
8

Также использовать DNS-адреса, предоставляемые DHCP-сервером:

netsh interface ipv4 set dns "Local Area Connection" dhcp 

плюс, если вы хотите сбросить адрес / маску / шлюз на адреса DHCP: netsh interface ipv4 set address name = "Подключение по локальной сети" source = dhcp

hello_earth · 8 лет назад · 0
mmm ответил 13 лет назад
M 181
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 

Перейти на эту страницу, чтобы увидеть полное описание.

Обратите внимание, что используемые здесь командлеты недоступны в более ранних версиях, таких как Windows 7.

краткий, работает как шарм. Спасибо :) Особенно полезно на AWS Opsworks!

Ganesh Hegde · 10 лет назад · 0
Juanal ответил 12 лет назад
J 161
1

Adding a fix to Logman's version for WinXP (sp3 hebrew), seems like it need to remove 2 chars at the end so added a "global" kind of fix for any other weird case.

:: 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 ответил 11 лет назад
S 41
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") 

Установите 2 DNS-сервера на конкретный сетевой адаптер:

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") 
Nathan ответил 9 лет назад
N 696
0

Вот твой новый друг: QuickSetDNS от NirSoft, как обычно, потрясающий.

screenshot

Это также может быть использовано в командной строке :) с этими преимуществами перед netsh:

  • упрощенный синтаксис, в частности для настройки альтернативного сервера
  • автоматически запрашивает повышение привилегий


Всего несколько предостережений:

  • поддерживает только настройку IPv4, но не IPv6
  • в командной строке следует использовать UUID адаптера, а не понятное имя (например, «Подключение по локальной сети») начиная с QuickSetDNS 1.21, имена соединений также поддерживаются;)
Gras Double ответил 8 лет назад
G 659