Alterar DNS com script

Alterar DNS com script

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 depois digito os números DNS.

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

Responder1

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", não funcionará. Se você estiver executando o XP, precisará alterar "ipv4" para "ip". IPv6 também pode ser usado.

Defina máscara de sub-rede, endereço IP e 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 ipconfig da linha cmd. Mas você também pode usar o seguinte para obter um resultado ipconfig abreviado:

ipconfig | find /I "Ethernet adapter"

usando o cmd ipconfig acima, podemos percorrer a conexão (Código fonte) e configure 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

Responder2

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

netsh interface ipv4 set dns "Local Area Connection" dhcp

Responder3

Aqui está 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 configurar o servidor alternativo
  • pede automaticamente elevação de privilégio


Apenas algumas advertências:

  • suporta apenas configuração de IPv4, não de IPv6
    • desde QuickSetDNS 1.30, a configuração de servidores DNS IPv6 também é suportada;)
  • 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 QuickSetDNS 1.21, nomes de conexão também são suportados;)

Responder4

Todas as demais respostas usam netsh, que pelo menos na máquina Windows 2012R2 com a qual eu estava trabalhando esta manhã relatou:

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.

... agora, tenho certeza de que não será o caso tão cedo, mas ... ainda assim, isso me fez verificar o Powershell.

Aqui está a rota do PowerShell que segui e assume uma única interface física. Se você tiver mais, precisará dar uma olhada para escolher a interface certa :)

$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")

Os documentos relevantes (em 15/05/2020) são:

informação relacionada