web-dev-qa-db-fra.com

Changer le DNS avec le script

Je dois changer fréquemment l'adresse du serveur DNS. Pour l'instant, je le fais en ouvrant 'réseau et centre de partage' - 'connexion au réseau local' - propriétés - ipv4 - puis en tapant les numéros DNS.

Y a-t-il un moyen plus rapide de le faire? Puis-je le faire avec un fichier de commandes ou un script PowerShell? Existe-t-il une commande de console intégrée pour changer le DNS?

29
Endy Tjahjono

Valeur DNS primaire:

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

Valeur secondaire:

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

Ce qui fonctionne très bien si le nom de la connexion est correct. Si le nom n'est pas "Connexion au réseau local", cela ne fonctionnera pas. Si vous utilisez XP, vous devez remplacer "ipv4" par "ip". IPv6 peut également être utilisé.

Définir le masque de sous-réseau, l'adresse IP et la passerelle:

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

Pour trouver la connexion réseau, vous pouvez utiliser ipconfig à partir de la ligne de commande. Mais vous pouvez également utiliser les éléments suivants pour un résultat abrégé ipconfig:

ipconfig | find /I "Ethernet adapter"

en utilisant la commande ipconfig ci-dessus, nous pouvons parcourir la connexion ( le code source ) et définir les serveurs 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
38
Logman

Pour utiliser également les adresses DNS fournies par le serveur DHCP:

netsh interface ipv4 set dns "Local Area Connection" dhcp
8
mmm

À l'aide d'un script Powershell sous Windows 8 ou 2012, vous pouvez définir les valeurs comme suit:

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

wi-Fi est le nom de l'interface qui vous intéresse. Vous pouvez répertorier les interfaces en exécutant:

Get-NetAdapter

Pour réinitialiser les adresses DNS et utiliser DHCP:

Set-DnsClientServerAddress -InterfaceAlias wi-fi -ResetServerAddresses

Allez à cette page pour voir une description complète.

Notez que les commandes utilisées ici ne sont pas disponibles dans les versions antérieures, telles que Windows 7.

6
Juanal

Voici votre nouvel ami: QuickSetDNS , de NirSoft, étonnant comme d’habitude.

screenshot

Il peut également être utilisé en ligne de commande :) avec ces avantages par rapport à netsh:

  • syntaxe plus simple, en particulier pour configurer le serveur alternatif
  • demande automatiquement l'élévation de privilège


Quelques mises en garde:

  • prend en charge uniquement le réglage d'IPv4, pas d'IPv6
  • en ligne de commande, l’adaptateur UUID doit être utilisé et non le nom convivial ("Connexion au réseau local", par exemple). depuis QuickSetDNS 1.21, les noms de connexion sont également supportés;)
3
Gras Double

Ajouter un correctif à la version de Logman pour WinXP (sp3 hebrew) semble indiquer la nécessité de supprimer 2 caractères à la fin. Nous avons donc ajouté un type de correctif "global" pour tout autre cas étrange.

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

1
Sniffleh

Cette réponse est copiée de XP1 ici . Si XP1 souhaite publier cette réponse, veuillez le faire et je supprimerai ma réponse.

Voici un autre moyen de changer de DNS en utilisant WMIC (ligne de commande de Windows Management Instrumentation).

Les commandes doivent être exécutées en tant qu'administrateur pour être appliquées.

Effacer les serveurs DNS:

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

Définir 1 serveur DNS:

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

Définissez 2 serveurs DNS:

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

Définissez 2 serveurs DNS sur une carte réseau particulière:

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

Un autre exemple pour définir la liste de recherche de domaine:

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