スクリプトでDNSを変更する

スクリプトでDNSを変更する

DNS サーバーのアドレスを頻繁に変更する必要があり、今のところは、「ネットワークと共有センター」 - 「ローカル エリア接続」 - プロパティ - IPv4 を開いて、DNS 番号を入力することで変更しています。

もっと速く実行する方法はありますか? バッチ ファイルまたは PowerShell スクリプトで実行できますか? DNS を変更するための組み込みのコンソール コマンドはありますか?

答え1

プライマリ DNS 値:

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

二次価値:

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

接続名が正しい場合は、うまく機能します。名前が「ローカル エリア接続」でない場合は機能しません。XP を実行している場合は、「ipv4」を「ip」に変更する必要があります。IPv6 も使用できます。

サブネット マスク、IP アドレス、ゲートウェイを設定します。

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

ネットワーク接続を見つけるには、コマンド ラインから ipconfig を使用できます。ただし、短縮された ipconfig 結果を取得するには、次のように使用することもできます。

ipconfig | find /I "Ethernet adapter"

上記のipconfigコマンドを使用すると、接続をループすることができます(ソースコード) をクリックし、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

答え2

DHCP サーバーによって提供される DNS アドレスを使用するには:

netsh interface ipv4 set dns "Local Area Connection" dhcp

答え3

これがあなたの新しい友達です:クイックセットDNS、NirSoft による、いつものように素晴らしい。

スクリーンショット

また、コマンド ラインでも使用できます :) netsh に比べて次のような利点があります。

  • 代替サーバーの設定に特に便利な構文
  • 自動的に権限の昇格を要求する


注意点がいくつかあります:

  • IPv4の設定のみサポートし、IPv6の設定はサポートしません。
    • QuickSetDNS 1.30 以降では、IPv6 DNS サーバーの設定もサポートされています ;)
  • コマンドラインでは、フレンドリ名(例:"ローカルエリア接続")ではなく、アダプタの UUID を使用する必要があります。
    • QuickSetDNS 1.21 以降では、接続名もサポートされています ;)

答え4

残りの回答はすべて netsh を使用しており、少なくとも今朝私が作業していた Windows 2012R2 マシンでは次のように報告されました。

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.

... 今のところ、すぐにそうなることはないと思いますが...それでも、Powershell を調べてみることにしました。

これは私が使用した PowerShell ルートです。単一の物理インターフェイスを想定しています。複数の物理インターフェイスがある場合は、適切なインターフェイスの選択を検討する必要があります :)

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

関連文書(2020-05-15時点)は次のとおりです。

関連情報