Alterar DNS com script

29

Preciso alterar frequentemente o endereço do servidor DNS e, por enquanto, faço isso abrindo 'centro de rede e compartilhamento' - 'conexão de área local' - propriedades - ipv4 - e digite os números DNS.

Existe uma maneira mais rápida de fazer isso? Posso fazer isso com um arquivo em lotes ou um script do PowerShell? Existe um comando do console interno para alterar o DNS?

Endy Tjahjono
fonte

Respostas:

38

Valor DNS primário:

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

Valor secundário:

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

O que funciona muito bem se o nome da conexão estiver correto. Se o nome não for "Conexão local", ele não funcionará. Se você estiver executando o XP, precisará alterar "ipv4" para "ip". O IPv6 também pode ser usado.

Defina a máscara de sub-rede, o endereço IP e o gateway:

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

Para encontrar a conexão de rede, você pode usar o ipconfig na linha cmd. Mas você também pode usar o seguinte para obter um resultado abreviado do ipconfig:

ipconfig | find /I "Ethernet adapter"

usando o ipconfig cmd acima, podemos fazer um loop pela conexão ( código fonte ) e definir os servidores 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
fonte
3
Excelente resposta. Você deve incluir fontes para itens como Cotações e Código.
precisa saber é o seguinte
8

Também para usar os endereços DNS fornecidos pelo servidor DHCP:

netsh interface ipv4 set dns "Local Area Connection" dhcp
mmm
fonte
além de no caso de você deseja redefinir o endereço / máscara / porta de entrada para aqueles de DHCP: netsh interface ipv4 nome de endereço set = source "Conexão Local" = dhcp
hello_earth
6

Usando um script do Powershell no Windows 8 ou 2012, você pode definir os valores assim:

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

Onde wi-Fi é o nome da interface em que você está interessado. Você pode listar as interfaces executando:

Get-NetAdapter

Para redefinir os endereços DNS e usar DHCP:

Set-DnsClientServerAddress -InterfaceAlias wi-fi -ResetServerAddresses

Vá para esta página para ver uma descrição completa.

Observe que os comandos usados ​​aqui não estão disponíveis em versões anteriores, como o Windows 7.

Juanal
fonte
conciso, funciona como um encanto. Obrigado :) Especialmente útil no AWS Opsworks!
Ganesh Hegde 25/09
3

Aqui está o seu novo amigo: QuickSetDNS , da NirSoft, incrível como sempre.

captura de tela

Também pode ser usado na linha de comando :) com estas vantagens sobre o netsh:

  • sintaxe mais fácil, em particular para definir o servidor alternativo
  • solicita automaticamente a elevação de privilégios


Apenas algumas ressalvas:

  • suporta apenas configurações de IPv4, não de IPv6
  • na linha de comando, o UUID do adaptador deve ser usado, não o nome amigável (por exemplo, "Conexão de área local") desde o QuickSetDNS 1.21, os nomes de conexão também são suportados;)
Gras Double
fonte
Aqui está um exemplo de código aberto que usa a mesma abordagem acima: codeproject.com/Articles/20639/…
Top-Master
1

Adicionando uma correção à versão de Logman para o WinXP (sp3 hebrew), parece que é necessário remover 2 caracteres no final, então foi adicionado um tipo de correção "global" para qualquer outro caso estranho.

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

Esta resposta é copiada do XP1 aqui . Se o XP1 desejar publicar esta resposta, faça-o e eu excluirei minha resposta.

Aqui está outra maneira de alterar o DNS usando o WMIC (linha de comando da Instrumentação de Gerenciamento do Windows).

Os comandos devem ser executados como administrador para serem aplicados.

Limpar servidores DNS:

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

Defina 1 servidor DNS:

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

Defina 2 servidores DNS:

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

Defina 2 servidores DNS em um adaptador de rede específico:

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

Outro exemplo para definir a lista de pesquisa de domínio:

wmic nicconfig call SetDNSSuffixSearchOrder ("domain.tld")
Nathan
fonte