现有一些计算机的网卡,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程序集版本搜索分析