背景
现有一些计算机的网卡,ip、网关、DNS均为动态分配。为强化管理,按指定的MAC设定成静态的IP、网关、DNS。由于计算机数量众多,采用批处理方式执行。
方法
1,设计一个配置清单,定义MAC地址和配置信息的映射。示例如下。
对应的栏位分别为:MAC,IP, 子网掩码,网关、主DNS、次DNS
MAC1 10.XX.XX.XX 255.X.X.0 10.XX.XX.1 10.X.0.1 10.XX.X.X
MAC2 10.XX.XX.XX 255.X.X.0 10.XX.XX.1 10.X.0.1 10.XX.X.X
MAC3 10.XX.XX.XX 255.X.X.0 10.XX.XX.1 10.X.0.1 10.XX.X.X
注:
可以将网卡用符合-分隔,以便程序简化。此配置信息MAC的格式没有分隔符-
2,基于此逻辑,设计程序如下。此程序将在单台服务器上执行。
@echo off
call 0-proc-chcp-to-65001.bat
setlocal EnableDelayedExpansion
rem config file format of each line:mac ip mask gateway dns1 dns2
set /a mac_matched_count=0
set config_file=%~1
if not exist %config_file% (
echo config file does not exist. program exit.
goto :End
)
rem get the actual interface card, then search the matched info in config file, and set it.
for /f "tokens=1,3 delims=," %%i in ('getmac /v /fo csv /nh') do (
set connect_name=%%i
set act_mac_addr=%%j
set connect_name=!connect_name:"=!
set act_mac_addr=!act_mac_addr:"=!
set act_mac_addr=!act_mac_addr:-=!
rem line content: mac ip mask gateway dns1 dns2
for /f "tokens=1,2,3,4,5,6 delims= " %%k in (!config_file!) do (
set mac=%%k
set ip=%%l
set mask=%%m
set gateway=%%n
set dns1=%%o
set dns2=%%p
set ip_pattern=!ip:~0,5!
if /i "!act_mac_addr!" equ "!mac!" (
set /a mac_matched_count+=1
netsh interface ip set address "!connect_name!" static !ip! !mask! !gateway!
netsh interface ip set dns "!connect_name!" static !dns1! primary
netsh interface ip add dns "!connect_name!" static !dns2!
echo mac_addr: !act_mac_addr!, connect_name: !connect_name! has been set successfully.
goto :End
)
)
)
if !mac_matched_count!==0 (echo no matched network interface)
:End
程序基本逻辑说明:
1,循环查找本机的网卡MAC信息。
2,对查出来的每一条MAC地址,和配置清单文件逐条进行比对。
3,如果比对成功,则按定义的信息进行配置。
注:
1,这个文件仅在单台服务上执行。如果要在多台执行,思路是将此脚本程序(需略加修改)和配置清单自动发送到远程服务器,执行后删除便可。
2,0-proc-chcp-to-65001.bat的内容参考:.NET程序集版本搜索分析