批量给200台电脑改DNS,我拿样机试出脚本和手配的三种差异
单位最近换了出口线路,网维那边要求所有办公机统一指向新DNS。200多台机器,我肯定不能挨个手配,但直接推脚本又怕出岔子。老规矩,先拿五台样机跑三天。
第一天我用了最笨的办法:netsh interface ip set dns 加两条命令,一条设主DNS一条设备用。五台机子跑完看着都对,ipconfig /all 显示没问题。但我留了个心眼,把每台机的网卡名称都记下来,因为有些老机子网卡名不是「本地连接」而是「以太网」,脚本里写死了名称就会报错。果然,两台老机子报「找不到接口」,得先 netsh interface show interface 把名字对出来再改脚本。
第二天我试了第二种方式:组策略下发。好处是统一、有日志、能回滚,坏处是得等 gpupdate 刷新,而且如果某台机子离线就得多等一个周期。我拿两台机子做了对比,一台在线一台断网开机,在线那台半小时内生效,断网那台开机后连上网等了快两个小时才刷上。所以如果急着切换,组策略不是最快的路子。
第三种是 PowerShell 的 Set-DnsClientServerAddress,这个最灵活,能按网卡索引和接口别名来设,还能加 -Validate 参数做预检。我写了个小脚本,先把所有网卡信息导出来,筛出「已连接」且「有默认网关」的,再批量设。五台样机跑下来,四台一次过,有一台是双网卡,一个连内网一个连外网,脚本差点把外网网卡的DNS也改了,还好我加了判断条件:只改有默认网关的那块网卡。
三天下来,我的结论是:如果机器都在域里、不着急,用组策略最稳,出问题好回滚;如果要快速切换、机器杂,用 PowerShell 脚本加预检最靠谱,但网卡名称和双网卡这两点必须提前处理。netsh 我最后只留作应急单机用。
还有个细节,改完 DNS 最好顺手 ipconfig /flushdns,不然有些老系统缓存不刷新,访问内网系统会解析到旧地址。我样机里就有一台因为这个卡了半天。
你们批量改网络配置的时候,是习惯用组策略还是脚本?有没有遇到过双网卡被误改的情况,最后怎么在脚本里做判断的?
