Changer le DNS avec le script

29

J'ai besoin de changer fréquemment l'adresse du serveur DNS, et 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.

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

Endy Tjahjono
la source

Réponses:

38

Valeur DNS principale:

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éfinissez 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 cmd. Mais vous pouvez également utiliser ce qui suit pour un résultat abrégé ipconfig:

ipconfig | find /I "Ethernet adapter"

en utilisant la cmd ipconfig ci-dessus, nous pouvons parcourir la connexion ( 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
Logman
la source
3
Excellente réponse. Vous devez inclure des sources pour des choses comme les citations et le code.
Ƭᴇcʜιᴇ007
8

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

netsh interface ipv4 set dns "Local Area Connection" dhcp
mmm
la source
plus dans le cas où vous souhaitez réinitialiser l'adresse / le masque / la passerelle à ceux de DHCP: interface netsh ipv4 set address name = "Connexion au
réseau
6

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

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 sur 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.

Juanal
la source
concis, fonctionne comme un charme. Merci :) Particulièrement utile sur AWS Opsworks!
Ganesh Hegde
3

Voici votre nouvel ami: QuickSetDNS , par NirSoft, incroyable comme d'habitude.

capture d'écran

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 une élévation de privilèges


Quelques mises en garde:

  • prend en charge uniquement le réglage d'IPv4, pas d'IPv6
  • dans la ligne de commande, l'adaptateur UUID doit être utilisé, pas le nom convivial (par exemple "Connexion au réseau local") depuis QuickSetDNS 1.21, les noms de connexion sont également pris en charge;)
Gras Double
la source
voici un exemple open-source qui utilise la même approche que ci-dessus: codeproject.com/Articles/20639/…
Top-Master
1

L'ajout d'un correctif à la version de Logman pour WinXP (hébreu sp3) semble nécessiter la suppression de 2 caractères à la fin, donc un type de correctif "global" a été ajouté 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

Sniffleh
la source
0

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

Voici une autre façon de modifier le DNS à l'aide de WMIC (ligne de commande de Windows Management Instrumentation).

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

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")
Nathan
la source