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

Что отлично работает, ЕСЛИ имя соединения правильное. Если имя не "Local Area Connection", то оно не будет работать. Если вы используете 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, мы можем выполнить цикл по соединению (исходный код) и настройте 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

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

netsh interface ipv4 set dns "Local Area Connection" dhcp

решение3

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

Скриншот

Его также можно использовать в командной строке :) со следующими преимуществами по сравнению с netsh:

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


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

  • поддерживает только настройку IPv4, но не IPv6
    • начиная с QuickSetDNS 1.30 также поддерживается настройка DNS-серверов IPv6 ;)
  • В командной строке следует использовать 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")

Соответствующие документы (по состоянию на 15.05.2020 г.):

Связанный контент