Изменить 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

Что прекрасно работает, если имя соединения правильное. Если имя не «Подключение по локальной сети», оно не будет работать. Если вы используете 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
лесоруб
источник
3
Отличный ответ. Вы должны включить источники для таких вещей, как цитаты и код.
Ƭᴇcʜιᴇ007
8

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

netsh interface ipv4 set dns "Local Area Connection" dhcp
ммм
источник
плюс в случае, если вы хотите сбросить адрес / маску / шлюз на адреса DHCP: netsh interface ipv4 set name name = "Подключение по локальной сети" source = 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

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

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

Juanal
источник
краткий, работает как шарм. Спасибо :) Особенно полезно на AWS Opsworks!
Ганеш Хегде
3

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

Скриншот

Это также может быть использовано в командной строке :) с этими преимуществами перед 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

Sniffleh
источник
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")
Натан
источник