Cambia DNS con script


29

Devo cambiare frequentemente l'indirizzo del server DNS, e per ora lo faccio aprendo "network and sharing center" - "local area connection" - properties - ipv4 - e quindi digitando i numeri DNS.

C'è un modo più veloce per farlo? Posso farlo con un file batch o uno script PowerShell? Esiste un comando console integrato per cambiare DNS?

Risposte:


38

Valore DNS primario:

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

Valore secondario:

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

Che funziona benissimo SE il nome della connessione è corretto. Se il nome non è "Connessione alla rete locale", non funzionerà. Se usi XP devi cambiare "ipv4" in "ip". È possibile utilizzare anche IPv6.

Imposta subnet mask, indirizzo 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

Per trovare la connessione di rete è possibile utilizzare ipconfig dalla riga cmd. Ma puoi anche usare quanto segue per un risultato ipconfig abbreviato:

ipconfig | find /I "Ethernet adapter"

utilizzando il cmd ipconfig sopra riportato possiamo scorrere la connessione ( codice sorgente ) e impostare i server 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

3
Risposta eccellente. Dovresti includere fonti per cose come citazioni e codice.
Ƭᴇcʜιᴇ007,

8

Anche per utilizzare gli indirizzi DNS forniti dal server DHCP:

netsh interface ipv4 set dns "Local Area Connection" dhcp

Inoltre, nel caso in cui si desideri reimpostare l'indirizzo / maschera / gateway su quelli del DHCP: netsh interface ipv4 set address name = "Local Area Connection" source = dhcp
hello_earth

6

Utilizzando uno script Powershell in Windows 8 o 2012, è possibile impostare i valori in questo modo:

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

Dove wi-Fi è il nome dell'interfaccia che ti interessa. Puoi elencare le interfacce eseguendo:

Get-NetAdapter

Per ripristinare gli indirizzi DNS e utilizzare DHCP:

Set-DnsClientServerAddress -InterfaceAlias wi-fi -ResetServerAddresses

Vai a questa pagina per vedere una descrizione completa.

Si noti che i comandi utilizzati qui non sono disponibili nelle versioni precedenti, come Windows 7.


conciso, funziona come un fascino. Grazie :) Particolarmente utile su AWS Opsworks!
Ganesh Hegde,

3

Ecco il tuo nuovo amico: QuickSetDNS , di NirSoft, sorprendente come al solito.

immagine dello schermo

Può anche essere usato nella riga di comando :) con questi vantaggi rispetto a netsh:

  • sintassi più semplice, in particolare per l'impostazione del server alternativo
  • chiede automaticamente l'elevazione dei privilegi


Solo alcuni avvertimenti:

  • supporta solo l'impostazione di IPv4, non di IPv6
  • nella riga di comando, utilizzare l'UUID dell'adattatore, non il nome descrittivo (ad es. "Connessione alla rete locale") da QuickSetDNS 1.21, sono supportati anche i nomi delle connessioni;)

ecco un esempio open source che utilizza lo stesso approccio di cui sopra: codeproject.com/Articles/20639/…
Top-Master l'

1

Aggiungendo una correzione alla versione di Logman per WinXP (sp3 ebraico), sembra che alla fine sia necessario rimuovere 2 caratteri, quindi è stato aggiunto un tipo di correzione "globale" per qualsiasi altro caso strano.

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


0

Questa risposta viene copiata da XP1 qui . Se XP1 desidera pubblicare questa risposta, ti preghiamo di farlo e cancellerò la mia risposta.

Ecco un altro modo per cambiare DNS utilizzando WMIC (riga di comando di Strumentazione gestione Windows).

I comandi devono essere eseguiti come amministratore per essere applicati.

Cancella server DNS:

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

Set 1 server DNS:

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

Set 2 server DNS:

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

Impostare 2 server DNS su una particolare scheda di rete:

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

Un altro esempio per l'impostazione dell'elenco di ricerca del dominio:

wmic nicconfig call SetDNSSuffixSearchOrder ("domain.tld")
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.