PowerShell脚本可自动化配置Windows终端内网DNS,核心是精准识别接口、设置静态DNS、禁用DHCP DNS覆盖,并支持批量部署与验证;示例命令Set-DnsClientServerAddress配合-ResetServerAddresses确保仅保留指定内网DNS。
powershell 脚本可高效完成 windows 终端内网辅助 dns 服务器的自动化配置,尤其适用于批量部署、域环境终端或需与内网 dns(如公司 ad 集成 dns 服务器)协同工作的场景。关键在于精准识别网络接口、设置静态 dns 地址、保留或禁用 dhcp 获取的 dns、并确保配置持久生效。
以下为实用、可直接运行的核心方法:
精准定位并配置指定网络接口的内网 DNS
使用 Set-DnsClientServerAddress 命令,配合 -InterfaceAlias 或 -InterfaceIndex,避免误配所有适配器:
# 示例:为“以太网”接口设置主DNS(10.1.1.10)和备用DNS(10.1.1.11)
Set-DnsClientServerAddress -InterfaceAlias "以太网" -ServerAddresses "10.1.1.10","10.1.1.11" -ResetServerAddresses
# 若接口名含空格或非英文(如“WLAN”“本地连接”),建议先查真实别名:
Get-NetAdapter | Where-Object {$_.Status -eq 'Up'} | Select-Object Name, InterfaceDescription✅ 注意:
-ResetServerAddresses参数会清空原有 DNS 条目,确保只保留你指定的内网 DNS,防止残留公网 DNS 干扰解析优先级。
批量适配多终端:按网络类型自动匹配接口
内网终端常通过有线/无线接入不同 VLAN,脚本可智能判断并应用对应 DNS:
$primaryInternalDNS = "10.1.1.10"
$secondaryInternalDNS = "10.1.1.11"
# 自动选择启用中的有线接口(优先匹配“以太网”“Ethernet”“LAN”关键词)
$wiredAdapter = Get-NetAdapter | Where-Object {
$_.Status -eq 'Up' -and ($_.Name -match '以太网|Ethernet|LAN')
} | Select-Object -First 1
# 自动选择启用中的无线接口(匹配“WLAN”“Wi-Fi”“无线”)
$wirelessAdapter = Get-NetAdapter | Where-Object {
$_.Status -eq 'Up' -and ($_.Name -match 'WLAN|Wi-Fi|无线')
} | Select-Object -First 1
if ($wiredAdapter) {
Set-DnsClientServerAddress -InterfaceAlias $wiredAdapter.Name -ServerAddresses $primaryInternalDNS,$secondaryInternalDNS -ResetServerAddresses
Write-Host "✅ 已为有线接口 $($wiredAdapter.Name) 配置内网 DNS"
}
if ($wirelessAdapter) {
Set-DnsClientServerAddress -InterfaceAlias $wirelessAdapter.Name -ServerAddresses $primaryInternalDNS,$secondaryInternalDNS -ResetServerAddresses
Write-Host "✅ 已为无线接口 $($wirelessAdapter.Name) 配置内网 DNS"
}强制禁用 DHCP 分配的 DNS(防覆盖)
某些企业 DHCP 服务器会推送 DNS 设置,导致脚本配置被覆盖。可在设置后关闭该接口的 DHCP DNS 获取:
# 关闭“以太网”接口的 DHCP DNS 获取(仅保留手动设置) Set-DnsClient -InterfaceAlias "以太网" -ConnectionSpecificSuffix "" -RegisterThisConnectionsAddress $false # 注:此操作不影响 IP 获取方式,仅锁定 DNS 为手动配置
验证与回滚支持(运维友好)
添加简单验证逻辑,确保 DNS 可达且能解析内网域名:
function Test-InternalDns {
param($dnsServer, $testDomain = "dc01.corp.local")
try {
Resolve-DnsName -Name $testDomain -Server $dnsServer -Type A -DnsOnly -ErrorAction Stop | Out-Null
return $true
} catch { return $false }
}
if (Test-InternalDns -dnsServer "10.1.1.10") {
Write-Host "✔ 内网 DNS 10.1.1.10 可正常解析 $testDomain"
} else {
Write-Warning "⚠ 内网 DNS 不可达,请检查网络连通性或地址准确性"
}不复杂但容易忽略。


















