批量修改dns+域脚本

,“`powershell,$dns = “8.8.8.8”;$domain = “example.com”;GetWmiObject Class Win32_NetworkAdapterConfiguration Filter IPEnabled=TRUE | % { $_.SetDNSServerSearchOrder($dns) ; $_.SetDomain($

批量修改DNS与域脚本开发指南

背景与需求分析

在企业网络管理中,批量修改DNS服务器和域配置是常见运维场景。

  • 迁移AD域控制器时需要更新客户端DNS指向
  • 更换ISP服务商后需统一修改DNS地址
  • 大规模部署新域名策略
  • 修复错误配置的DNS设置

传统手动逐台修改效率低下且易出错,自动化脚本可实现:

批量修改dns+域脚本

✓ 分钟级完成千台设备配置
✓ 标准化配置减少人为错误
✓ 可重复执行的修改流程
✓ 详细日志便于审计追踪

环境准备与工具选择

1 操作系统支持

操作系统类型 推荐工具 备注
Windows PowerShell 原生支持,无需额外安装
Linux Bash/Python 需root权限
混合环境 Python+Paramiko SSH协议跨平台管理

2 必备工具清单

  1. PowerShell(Windows环境)

    • 版本要求:Windows 7+ / 2008+
    • 核心命令:SetDnsClientServerAddress
  2. Python(跨平台方案)

    批量修改dns+域脚本

    • 版本要求:Python 3.6+
    • 依赖库:subprocess, csv, paramiko
  3. 网络连通性验证工具

    • ping/nslookup:验证DNS可达性
    • dnspython库:高级DNS查询(可选)

脚本设计与实现

1 Windows环境PowerShell方案

# 读取目标主机列表
$computers = GetContent Path "C:IThosts.txt"
# 定义新的DNS配置
$dns1 = "192.168.1.10"
$dns2 = "8.8.8.8"
$domain = "newdomain.local"
# 遍历修改每台主机
foreach ($computer in $computers) {
    WriteHost "Processing $computer..."
    try {
        # 远程执行命令
        InstallModule Name PSRemoting Force
        InvokeCommand ComputerName $computer ScriptBlock {
            SetDnsClientServerAddress InterfaceIndex (GetNetAdapter).InterfaceIndex 
            ServerAddresses (@("$using:dns1","$using:dns2")) 
            SetItemProperty Path "HKLM:SOFTWAREMicrosoftWindows NTCurrentVersionWinlogon" Name "AltDomain" Value "$using:domain"
        } Credential (GetCredential)
    } catch {
        WriteHost "Error on $computer : $_" ForegroundColor Red
    }
}

2 Linux环境Bash方案

#!/bin/bash
# 配置文件路径
HOST_LIST="hosts.txt"
DNS_CONF="/etc/resolv.conf"
# 循环处理所有主机
for HOST in $(cat $HOST_LIST); do
    echo "Processing $HOST..."
    ssh admin@$HOST bash <<EOF
        # 备份原始配置
        cp $DNS_CONF ${DNS_CONF}.bak
        # 生成新配置
        echo "nameserver 192.168.1.10" > $DNS_CONF
        echo "nameserver 8.8.8.8" >> $DNS_CONF
        # 修改/etc/default/grub域设置
        sed i "s/DOMAIN=olddomain/DOMAIN=newdomain/" /etc/default/grub
        grub2mkconfig o /boot/grub2/grub.cfg
    EOF
done

3 跨平台Python方案

import paramiko
import csv
# 读取CSV配置文件
with open('config.csv', newline='') as csvfile:
    reader = csv.DictReader(csvfile)
    for row in reader:
        host = row['Hostname']
        os_type = row['OS']
        # 建立SSH连接
        ssh = paramiko.SSHClient()
        ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
        ssh.connect(host, username='admin', password='secret')
        # 根据系统类型执行对应命令
        if os_type == 'Windows':
            cmds = [
                f"SetDnsClientServerAddress ServerAddresses ('192.168.1.10','8.8.8.8')",
                "SetItemProperty Path 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon' Name AltDomain Value newdomain"
            ]
        elif os_type == 'Linux':
            cmds = [
                "echo 'nameserver 192.168.1.10' > /etc/resolv.conf",
                "echo 'nameserver 8.8.8.8' >> /etc/resolv.conf",
                "sed i 's/OLDDOMAIN/newdomain/' /etc/default/grub"
            ]
        # 执行命令组
        for cmd in cmds:
            stdin, stdout, stderr = ssh.exec_command(cmd)
            print(stdout.read().decode())
        ssh.close()

安全与验证机制

1 前置检查清单

  1. 权限验证:确保目标设备启用远程执行权限
  2. 网络测试ping目标主机,确认网络连通性
  3. 配置备份:自动备份原始DNS配置文件(如/etc/resolv.conf.bak
  4. 测试环境:先在少量设备验证脚本效果

2 验证方法

验证类型 命令/方法 预期结果
DNS验证 nslookup www.google.com 返回正确IP地址
域验证 hostname 显示新域名
服务验证 访问域内关键服务(如文件服务器) 能正常访问
日志检查 查看系统事件日志 无错误相关DNS记录

常见问题与解决方案

1 执行失败排查

现象 可能原因 解决方案
连接超时 网络不通/防火墙阻挡 检查路由表,开放3389/22端口
权限不足 未使用管理员权限运行 添加Credential参数
命令执行错误 系统版本差异 增加版本判断逻辑
配置未生效 缓存未刷新 执行ipconfig /flushdns

2 特殊场景处理

  1. 混合架构环境:通过CSV文件标注系统类型,脚本自动分支处理
  2. 敏感系统保护:设置白名单,跳过核心服务器修改
  3. 增量式更新:对比当前配置与目标配置,仅修改差异项

相关问题与解答

Q1:如何确保脚本在不同Windows版本上兼容?

A:可通过GetComputerInfo获取系统版本,添加条件判断:

批量修改dns+域脚本

$osVersion = (GetComputerInfo).WindowsVersion
if ($osVersion like "10.*") {
    # Windows 10+专用命令
} elseif ($osVersion like "6.3*") {
    # Windows 8.1处理逻辑
}

Q2:修改DNS后如何验证配置有效性?

A:建议在脚本中集成验证模块:

  1. 执行ResolveDnsName www.microsoft.com
  2. 检查返回的IP地址是否符合预期
  3. 将验证结果写入日志文件,格式示例:
    
    [20231001 10:00] Host1: DNS验证成功,IP=20.37.156.195
    [20231001 10:05] Host2: DNS解析

来源互联网整合,作者:小编,如若转载,请注明出处:https://www.aiboce.com/ask/196982.html

Like (0)
小编小编
Previous 2025年5月1日 07:46
Next 2025年5月1日 07:55

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注