怎样用脚本批量修改DNS设置?

wen 实用脚本 2

本文目录导读:

怎样用脚本批量修改DNS设置?

  1. Windows系统 (PowerShell)
  2. Windows批处理脚本 (CMD)
  3. macOS系统 (Bash)
  4. Linux系统 (Bash)
  5. 远程批量修改 (跨网络)
  6. 使用配置文件批量管理
  7. 注意事项

我来介绍几种批量修改DNS设置的脚本方法,支持Windows、macOS和Linux系统。

Windows系统 (PowerShell)

批量修改所有网络适配器的DNS

# 设置主DNS和备用DNS
$primaryDNS = "8.8.8.8"
$secondaryDNS = "8.8.4.4"
# 获取所有网络适配器
$adapters = Get-NetAdapter | Where-Object {$_.Status -eq "Up"}
foreach ($adapter in $adapters) {
    Write-Host "正在修改适配器: $($adapter.Name)" -ForegroundColor Green
    # 设置DNS服务器
    Set-DnsClientServerAddress -InterfaceIndex $adapter.ifIndex -ServerAddresses ($primaryDNS, $secondaryDNS)
}
Write-Host "所有适配器DNS已修改完成" -ForegroundColor Yellow

针对特定适配器修改

# 只修改以太网和WiFi适配器
$targetAdapters = @("以太网", "WiFi", "本地连接")
foreach ($adapterName in $targetAdapters) {
    $adapter = Get-NetAdapter -Name $adapterName -ErrorAction SilentlyContinue
    if ($adapter) {
        Set-DnsClientServerAddress -InterfaceIndex $adapter.ifIndex -ServerAddresses ("8.8.8.8", "8.8.4.4")
        Write-Host "已修改 $adapterName 的DNS"
    }
}

从CSV文件批量读取配置

# DNS配置CSV文件格式:
# AdapterName,PrimaryDNS,SecondaryDNS
# "以太网","8.8.8.8","8.8.4.4"
# "WiFi","1.1.1.1","1.0.0.1"
$csvPath = "C:\dns_config.csv"
$dnsConfigs = Import-Csv $csvPath
foreach ($config in $dnsConfigs) {
    $adapter = Get-NetAdapter -Name $config.AdapterName -ErrorAction SilentlyContinue
    if ($adapter) {
        $dnsServers = @($config.PrimaryDNS)
        if ($config.SecondaryDNS) {
            $dnsServers += $config.SecondaryDNS
        }
        Set-DnsClientServerAddress -InterfaceIndex $adapter.ifIndex -ServerAddresses $dnsServers
        Write-Host "已配置 $($config.AdapterName)"
    }
}

Windows批处理脚本 (CMD)

@echo off
chcp 65001 >nul
set PRIMARY_DNS=8.8.8.8
set SECONDARY_DNS=8.8.4.4
echo 正在批量修改DNS设置...
for /f "tokens=*" %%a in ('netsh interface show interface ^| find "已连接"') do (
    for /f "tokens=1-4 delims= " %%b in ("%%a") do (
        set "ADAPTER_NAME=%%d"
        call :SetDNS "%%d"
    )
)
echo DNS修改完成!
pause
exit /b
:SetDNS
echo 正在修改适配器: %~1
netsh interface ip set dns "%~1" static %PRIMARY_DNS%
netsh interface ip add dns "%~1" %SECONDARY_DNS% index=2
goto :eof

macOS系统 (Bash)

#!/bin/bash
# DNS服务器配置
PRIMARY_DNS="8.8.8.8"
SECONDARY_DNS="8.8.4.4"
# 获取所有网络服务
services=$(networksetup -listallnetworkservices | grep -v "An asterisk")
for service in $services; do
    echo "正在修改服务: $service"
    # 检查服务是否启用
    if networksetup -getinfo "$service" > /dev/null 2>&1; then
        networksetup -setdnsservers "$service" $PRIMARY_DNS $SECONDARY_DNS
        echo "✓ $service DNS已更新"
    else
        echo "✗ $service 不可用,跳过"
    fi
done
echo "所有服务DNS配置完成"

Linux系统 (Bash)

#!/bin/bash
# DNS配置文件路径
DNS_CONFIG="/etc/resolv.conf"
BACKUP_FILE="/etc/resolv.conf.backup.$(date +%Y%m%d_%H%M%S)"
# 新的DNS服务器
PRIMARY_DNS="8.8.8.8"
SECONDARY_DNS="8.8.4.4"
echo "备份原DNS配置..."
cp $DNS_CONFIG $BACKUP_FILE
echo "批量修改DNS配置..."
# 方法1: 直接修改resolv.conf
cat > $DNS_CONFIG << EOF
# Generated by DNS batch script
nameserver $PRIMARY_DNS
nameserver $SECONDARY_DNS
options rotate
options timeout:1
EOF
echo "已更新DNS配置"
echo "原配置备份至: $BACKUP_FILE"
# 方法2: 使用nmcli (NetworkManager)
if command -v nmcli &> /dev/null; then
    echo "使用NetworkManager修改DNS..."
    connections=$(nmcli -t -f NAME connection show --active)
    for conn in $connections; do
        nmcli connection modify "$conn" ipv4.dns "$PRIMARY_DNS $SECONDARY_DNS"
        nmcli connection up "$conn"
        echo "已修改连接: $conn"
    done
fi

远程批量修改 (跨网络)

PowerShell远程执行

# 计算机列表
$computers = @(
    "PC-001",
    "PC-002", 
    "PC-003"
)
$credential = Get-Credential
foreach ($computer in $computers) {
    try {
        Invoke-Command -ComputerName $computer -Credential $credential -ScriptBlock {
            $adapters = Get-NetAdapter | Where-Object {$_.Status -eq "Up"}
            foreach ($adapter in $adapters) {
                Set-DnsClientServerAddress -InterfaceIndex $adapter.ifIndex -ServerAddresses ("8.8.8.8", "8.8.4.4")
            }
        }
        Write-Host "$computer 完成" -ForegroundColor Green
    }
    catch {
        Write-Host "$computer 失败: $_" -ForegroundColor Red
    }
}

使用配置文件批量管理

JSON配置文件示例

{
  "dns_servers": {
    "primary": "8.8.8.8",
    "secondary": "8.8.4.4"
  },
  "clients": [
    {
      "hostname": "PC-001",
      "interface": "eth0"
    },
    {
      "hostname": "PC-002",
      "interface": "WiFi"
    }
  ]
}

PowerShell读取JSON配置

$config = Get-Content "dns_config.json" | ConvertFrom-Json
foreach ($client in $config.clients) {
    # 执行修改操作
    Set-DnsClientServerAddress -InterfaceAlias $client.interface -ServerAddresses ($config.dns_servers.primary, $config.dns_servers.secondary)
}

注意事项

  1. 管理员权限:Windows需要以管理员身份运行
  2. 备份配置:修改前备份原DNS设置
  3. 测试验证:修改后测试DNS解析:
    nslookup google.com
  4. 网络兼容性:不同网络环境可能要求特定DNS
  5. 批量范围:根据实际需求控制修改范围

选择适合你环境和需求的脚本方法即可实现DNS的批量修改。

抱歉,评论功能暂时关闭!