本文目录导读:

我来介绍几种批量修改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)
}
注意事项
- 管理员权限:Windows需要以管理员身份运行
- 备份配置:修改前备份原DNS设置
- 测试验证:修改后测试DNS解析:
nslookup google.com
- 网络兼容性:不同网络环境可能要求特定DNS
- 批量范围:根据实际需求控制修改范围
选择适合你环境和需求的脚本方法即可实现DNS的批量修改。