通过Windows批处理脚本批量修改DNS

您所在的位置:网站首页 windows10怎么改dns地址 通过Windows批处理脚本批量修改DNS

通过Windows批处理脚本批量修改DNS

2023-07-18 17:14| 来源: 网络整理| 查看: 265

作者:半点闲

时间:2020.11.21

博客:blog.csdn.net/cg_i

因为我有某种怀旧情结并且我知道很多人都有,难道您不渴望美好的旧时光吗? ——半点闲

序言

在GUI时代,你可能会有疑问,为什么要花时间写批处理文件来修改DNS呢?难道它们不是已经成为过去了吗?难道不能通过鼠标几次轻松点击来完成吗?要想解答您的疑惑,先请您想象这样一种工作场景。如果同时修改近500台电脑的DNS呢?且它们还遍布在全县各乡镇的32家机构里,有些位于山区,最远的机构相距60公里左右,并且上述只能您一个人去完成。是的,只有您。您还会觉得轻松吗?不幸的是,这些不是想像而是我的日常。

前言

我知道您们急着想看代码,为助于您对代码的理解,保证程序能够正常运行,我有必要先交待一下,我所处的生产环境软硬件配置。 操作系统采用微软的WindowsXP Embedded 32位;WindowsXP 32位、Windows Embedded Standard7 (32/64位)、Windows7(32/64位)、Windows10 64位;客户机分为PC与升腾图型终端,其中图型终端是业务主力机,用的是微软的WindowsXP Embedded与Windows Embedded Standard7,采用这个系统的好处是,您对当前系统做的任何修改,每次系统重启都将被抹去,还原到初次安装系统时的状态,要想保存当前配置需要管理员权限及特殊命令(代码中会有体现)。这样就不用担心,一般用户无意修改了系统设置,而导致的系统故障,方便了日常维护与管理,当然PC机不存在上述限制。

软硬件环境介绍的虽然简单,但对理解下面即将给出的代码来说已然足够。下面言归正传,好戏即将登场!

setdns.bat

@ECHO OFF REM ***************************************************** REM * Author: 高玉涵 REM * File: setdns.bat REM * Date: 20201119 REM * Ver: v1.1 REM * Declare: 10.30关于修改业务终端网络配置的通知 REM * 1.添加DNS: REM * 11.x.x.xxx REM * 11.x.x.xxx REM * 2.测试DNS REM * 3.终端保存 REM * 4.重启 REM ***************************************************** setlocal enabledelayedexpansion set ct= wmic bios get manufacturer|findstr /ic:"centerm">nul&&goto init goto err :init for /f "delims=," %%n in ('Getmac /v /nh /fo csv') do ( (netsh interface ip set dns name=%%n source=static addr=11.x.x.xxx register=primary&&echo "%%n:DNS1:11.x.x.xxx 成功."&&ping -n 3 127.1>nul)||(echo "%%n 失败"&goto err) (netsh interface ip add dns name=%%n addr=11.x.x.xxx&&echo "%%n:DNS2:11.x.x.xxx 成功."&&ping -n 2 127.1>nul)||(echo "%%n 失败"&goto err) ) (ping test.xxx>nul&&echo "test.hnnx 测试通过."&&ping -n 3 127.1>nul)||(echo "test.xxx 测试失败!"&&ping -n 3 127.1>nul&goto err) :wr ewfmgr c: -commit shutdown -r -t 3 -c "配置完毕,系统重启中...!" goto end :err color 4 echo "配置失败,请及时联系信息科技部!" :end pause

代码不多在我的机器上能够完美工作,DNS地址11.x.0.xxx及域名test.xxx,请修改为您实际使用的。其中几句关键代码为了避免让您产生疑惑,这里单独拿出来解释一下。

wmic bios get manufacturer|findstr /ic:"centerm">nul&&goto init

这一句的目地是先获得机器的BIOS厂家标识信息,再通过findstr命令查找“centerm”(升腾)标识。找到后,GOTO跳转到指定位置执行接下来的代码,否则语句向下执行遇到GOTO语句跳转到代码结束位置结束程序(本次不考虑PC机。

)。这样做的目地是为了下面这一行代码。

ewfmgr c: -commit

ewfmgr命令用于提交并保存当前系统设置,是升腾终端特有的命令。

for /f "delims=," %%n in ('Getmac /v /nh /fo csv') do ( (netsh interface ip set dns name=%%n source=static addr=11.x.0.xxx register=primary&&echo "%%n:DNS1:11.x.0.xxx 成功."&&ping -n 3 127.1>nul)||(echo "%%n 失败"&goto err) (netsh interface ip add dns name=%%n addr=11.x.0.xxx&&echo "%%n:DNS2:11.x.0.xxx 成功."&&ping -n 2 127.1>nul)||(echo "%%n 失败"&goto err) )

上面的语句是轮询本机所有网络接口,并将指定主、从DNS添加到所有接口上。有些图型终端配有多个网卡,到底网线插在那个网口上不可知。但可以确定只有一个网口在工作,这里采用简单粗爆的方法都给设置上。当然您也可以进一步修改代码,逐个检查接口状态,实现精确操作。我比较懒加之执行结果,达到了预期目地就不费这个心了。

结束语

最后如何将脚本推送到每台机器并自动执行,从而达到无人值守自动化运营,因超出了



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3