powershell批量修改多台windows主机dns需先启用winrm并开放5985/5986端口,用test-wsman验证连通性;通过set-dnsclientserveraddress按interfacedescription精准匹配网卡并加-resetserveraddresses清空旧配置;批量执行采用invoke-command -asjob异步方式,配合try/catch异常处理、csv结构化日志及修改前备份、修改后nslookup验证与快速回滚机制。
用 powershell 批量修改多台 windows 主机的默认 dns 服务器,核心是远程执行 + 精准接口识别 + 安全清理再写入。不是简单循环改配置,而是要确保每一步可验证、可回滚、不残留旧 dns。
先确认所有目标机器能被远程管理
批量操作的前提是 WinRM(Windows Remote Management)已启用且网络可达:
- 在每台目标机上以管理员身份运行:winrm quickconfig(非域环境);域环境下通常已启用
- 防火墙需放行端口:5985(HTTP)或 5986(HTTPS),建议用 HTTPS 更安全
- 本地测试连通性:Test-WSMan -ComputerName 192.168.1.100
- 批量探测可用主机(避免脚本中断):
$online = Get-Content hosts.txt | ForEach-Object { if (Test-WSMan $_ -ErrorAction SilentlyContinue) { $_ } }
精准定位网卡并设置主备 DNS
不能硬写“以太网”——名称可能因语言、驱动、虚拟化而不同。推荐用 InterfaceAlias 或 InterfaceDescription 匹配:
PyCharm 2026.2.0.1 Windows版提供 JetBrains 官方 2026.2.0.1 版本安装包,适合在Windows系统上进行 Python 项目开发、运行、调试和测试。
- 查当前活跃有线网卡:Get-NetAdapter | Where-Object {$_.Status -eq 'Up' -and $_.InterfaceDescription -match 'Intel|Realtek|VMXNET'}
- 设 DNS 时务必加 -ResetServerAddresses,清空原有配置,防止追加导致解析混乱:
Set-DnsClientServerAddress -InterfaceAlias "LAN" -ServerAddresses "10.1.1.10", "10.1.1.11" -ResetServerAddresses -AddressFamily IPv4 - 若需兼容 IPv6,单独加一行:-AddressFamily IPv6 并指定对应 IPv6 DNS 地址
批量执行带错误处理和日志记录
不用 ForEach 循环硬跑,用 Invoke-Command -AsJob 异步提交,配合 try/catch 和结构化日志:
- 每台主机任务包裹在 try/catch 中,捕获 PSRemotingTransportException 等典型异常
- 成功/失败结果统一导出为 CSV:
[PSCustomObject]@{Computer=$c; Status='OK'; DNS='10.1.1.10,10.1.1.11'} | Export-Csv deploy-dns-log.csv -Append - 对连续失败的主机自动跳过,不阻塞整个批次
修改前导出原始 DNS,修改后立即验证
生产环境必须留退路,并确认生效:
- 执行前批量导出原始配置:
Invoke-Command -ComputerName $online { Get-DnsClientServerAddress -AddressFamily IPv4 | Select-Object InterfaceAlias, ServerAddresses } | Export-Csv dns-backup.csv - 修改后立刻测试解析:Invoke-Command -ComputerName $online { nslookup baidu.com 2>&1 }
- 发现异常时,用备份 CSV 快速回滚:Import-Csv dns-backup.csv | ForEach-Object { Invoke-Command -ComputerName $_.Computer { Set-DnsClientServerAddress -InterfaceAlias $_.InterfaceAlias -ServerAddresses $_.ServerAddresses -ResetServerAddresses } }










