DNS mit Skript ändern

Ich muss die DNS-Serveradresse häufig ändern, und im Moment öffne ich "Netzwerk - und Freigabecenter" - "Lokale Verbindung" - Eigenschaften - ipv4-und tippe dann die DNS-Nummern ein.

Gibt es einen schnelleren Weg? Kann ich es mit einer Batch-Datei oder einem Powershell-Skript tun? Gibt es einen integrierten Konsolenbefehl zum Ändern von DNS?

Author: Endy Tjahjono, 2012-08-18

8 answers

Primärer DNS-Wert:

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

Sekundärer Wert:

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

Was gut funktioniert, WENN der Name der Verbindung korrekt ist. Wenn der Name nicht "Lokale Verbindung" ist, funktioniert er nicht. Wenn Sie XP ausführen, müssen Sie "ipv4" in "ip"ändern. IPv6 kann auch verwendet werden.

Subnetzmaske, IP-Adresse und Gateway festlegen:

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

Um die Netzwerkverbindung zu finden, können Sie ipconfig über die cmd-Zeile verwenden. Sie können aber auch Folgendes für eine abgekürzte ipconfig verwenden Ergebnis:

ipconfig | find /I "Ethernet adapter"

Mit dem obigen ipconfig cmd können wir die Verbindung durchlaufen (Quellcode) und die DNS-Server festlegen:

:: 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
 41
Author: Logman,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2018-04-11 10:30:49

Auch zur Verwendung der vom DHCP-Server bereitgestellten DNS-Adressen:

netsh interface ipv4 set dns "Local Area Connection" dhcp
 8
Author: mmm,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2012-12-09 01:16:23

Hier ist dein neuer Freund: QuickSetDNS, von NirSoft, erstaunlich wie immer.

Abbildung

Es kann auch in der Befehlszeile verwendet werden:) mit diesen Vorteilen gegenüber netsh:

  • einfachere Syntax, insbesondere zum Setzen des alternativen Servers
  • fragt automatisch nach Privilege elevation


Nur ein paar Vorbehalte:

  • unterstützt nur die Einstellung von IPv4, nicht von IPv6
    • seit QuickSetDNS 1.30, IPv6 DNS einstellen server wird ebenfalls unterstützt ;)
  • in der Befehlszeile sollte die Adapter-UUID verwendet werden, nicht der freundliche Name (z. B. "Lokale Verbindung")
    • seit QuickSetDNS 1.21 werden auch Verbindungsnamen unterstützt;)
 7
Author: Gras Double,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2020-02-27 22:55:39

Mit einem Powershell - Skript in Windows 8 oder 2012 können Sie die Werte wie folgt festlegen:

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

Wobei wi-Fi der Name der Schnittstelle ist, an der Sie interessiert sind. Sie können die Schnittstellen auflisten, indem Sie Folgendes ausführen:

Get-NetAdapter

Um DNS-Adressen zurückzusetzen, verwenden Sie DHCP:

Set-DnsClientServerAddress -InterfaceAlias wi-fi -ResetServerAddresses

Gehe zu diese Seite um eine vollständige Beschreibung zu sehen.

Beachten Sie, dass die hier verwendeten Comandlets in früheren Versionen wie Windows 7 nicht verfügbar sind.

 6
Author: Juanal,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2017-11-18 02:05:32

Alle anderen Antworten verwenden netsh, was zumindest auf dem Windows 2012R2-Computer, mit dem ich heute Morgen gearbeitet habe, gemeldet wurde:

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.

... jetzt, Ich bin sicher, das ist nicht der Fall in absehbarer Zeit, aber... trotzdem musste ich Powershell überprüfen.

Hier ist die Powershell-Route, die ich genommen habe und die eine einzige physische Schnittstelle annimmt. Wenn Sie mehr haben, müssen Sie einen Blick in die Auswahl der richtigen Schnittstelle nehmen:)

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

Die relevanten Dokumente (Stand 2020-05-15) werden:

 1
Author: JonTheNiceGuy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2020-05-15 10:03:20

Hinzufügen eines Fixes zu Logmans Version für WinXP (sp3)), scheint, als müsste es am Ende 2 Zeichen entfernen, also habe ich eine "globale" Art von Fix für jeden anderen seltsamen Fall hinzugefügt.

:: 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
Author: Sniffleh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2020-07-23 01:55:56

Diese Antwort wird von XP1 hier kopiert. Wenn XP1 diese Antwort posten möchte, tun Sie dies bitte und ich werde meine Antwort löschen.

Hier ist eine weitere Möglichkeit, DNS mithilfe von WMIC (Windows Management Instrumentation Command-line) zu ändern.

Die Befehle müssen als Administrator ausgeführt werden, um sie anzuwenden.

DNS-Server löschen:

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

Set 1-DNS-server:

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

Setze 2 DNS-Server:

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

Legen Sie 2 DNS-Server in einem bestimmten Netzwerk fest adapter:

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

Ein weiteres Beispiel für die Einstellung der Domänensuchliste:

wmic nicconfig call SetDNSSuffixSearchOrder ("domain.tld")
 0
Author: Nathan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2017-05-23 12:41:47

Kürzlich (Ende 2019) hatte ich Probleme beim Konfigurieren statischer DNS-Server für Linux. Ich habe sehr viel darüber gelesen und es gab keine einzige Lösung, die zu 100% funktionieren würde. Immer gab es einen anderen Teil des Systems, der die Werte änderte. Dann habe ich gegraben, wie wirklich DNS für immer ändert. Und die Lösung ist in diesem Skript gekommen:

#!/usr/bin/env bash
f="/etc/resolv.conf"
chattr -i $f
rm -f $f
echo "nameserver 1.1.1.1" >> $f
echo "nameserver 8.8.8.8" >> $f
chattr +i $f

Das hat den Trick lange gemacht. Das Wichtigste hier ist, eine Datei mit dem richtigen body zu erstellen und dann das unveränderliche Flag dafür festzulegen (chattr +i).

 0
Author: pbies,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2019-12-06 22:07:56