欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

网管专用自动更改IP机器名工作组的批处理

程序员文章站 2022-06-03 15:29:49
本人负责的部门有上百台机器,重装完后需要恢复原有配置,我曾使用过很多方法: 1:手工更改,这条就不要说了 2:使用netsh dump +文件和 netsh -f +文件来...
本人负责的部门有上百台机器,重装完后需要恢复原有配置,我曾使用过很多方法:
1:手工更改,这条就不要说了
2:使用netsh dump +文件和 netsh -f +文件来更改,但是整个盘都格式化就没用.
3:使用专用的更改ip地址的小程序,但还是需要手工来指定ip

最后,我想到如下办法:
1:首先实现:netsh interface ip 来更改ip
2:使用wmic computersystem 修改工作组
3:使用reg add 来更改机器名
4:因为修改机器名后要重启才生效,于是使用:reboot.inf 来重启
5:后来增加了新机器名和ip的配置,使用机器的序列号(联想机:wmic bios get serialnumber)来做机器名,ip地址最后1位使用随机
因为可以通过 wmic来读取序列号,那么我们可以用来登记本机的网络配置时,就方便多了.
6:最后将自己整理的ip地址等对应表放到了bat中,避免bat调用其他文件.
7:实现上面功能后,我就可以将该bat文件封装到gho文件里面,恢复重启完后就可以自动设置,我不要做其他操作,用户就可以使用.如果有必要,你可以加上执行完后自动删除本身.

整个代码如下:(欢迎大家继续优化和整理)
复制代码 代码如下:

@echo off & code by m13632750052
for /f "tokens=12 delims= " %%i in ('ipconfig/all^|find "physical address"') do set localmac=%%i
echo 通过mac地址%localmac%查找对应的机器名
for /f "skip=90 tokens=1,2,3,4 delims= " %%i in (%~f0) do (
if [%%k]==[%localmac%] set name=%%i
if [%%k]==[%localmac%] set ip=%%j
if [%%k]==[%localmac%] set mac=%%k
if [%%k]==[%localmac%] set workgroup=%%l
set mask=255.255.0.0
set gway=168.30.1.233
set dns=168.1.4.147
set dns2=168.1.6.243
)
echo 显示查找结果 code by cn-dos breakme
if defined name (echo %name% %ip% %mac% %workgroup%) else (goto newset)
:enterset
for /l %%i in (3,-1,0) do ping -n 2 127.0.0.%%i>nul && @echo. %%i s 后修改机器名……

reg add "hkey_current_user\software\microsoft\windows\shellnoroam" /v @ /t reg_sz /d "%name%" /f
reg add "hklm\system\currentcontrolset\control\computername\computername" /v "computername" /t reg_sz /d "%name%" /f
reg add "hklm\system\currentcontrolset\control\computername\activecomputername" /v "computername" /t reg_sz /d "%name%" /f
reg add "hklm\system\currentcontrolset\services\eventlog" /v "computername" /t reg_sz /d "%name%" /f
reg add "hklm\system\currentcontrolset\control\computername\computername" /v "computername" /t reg_sz /d "%name%" /f
reg add "hklm\system\currentcontrolset\services\tcpip\parameters" /v "nv hostname" /t reg_sz /d "%name%" /f
reg add "hklm\system\currentcontrolset\services\tcpip\parameters" /v "hostname" /t reg_sz /d "%name%" /f

echo 刷新注册表
if exist c:\winnt (secedit /refreshpolicy machine_policy /enforce) else (gpupdate /force)

echo 修改工作组
wmic computersystem where name="%name%" call joindomainorworkgroup name="%workgroup%"
wmic computersystem where name="%computername%" call joindomainorworkgroup name="%workgroup%"

echo 修改ip
::查找mac所对应的连接名称
for /f "tokens=1,2,3,4,5,6 delims=-" %%a in ("%mac%") do set macwmic=%%a:%%b:%%c:%%d:%%e:%%f
for /f "skip=2 tokens=2* delims==" %%a in ('wmic nic where "macaddress='%macwmic%' and netconnectionid!=null" get netconnectionid /value') do set "connname=%%a"
if not defined connname set connname="本地连接"
netsh interface ip set address name="%connname%" source=static addr=%ip% mask=%mask%
netsh interface ip set address name="%connname%" gateway=%gway% gwmetric=0
netsh interface ip set dns name="%connname%" source=static addr=%dns% register=primary
netsh interface ip add dns name="%connname%" addr=%dns2% index=2
netsh interface ip set wins name="%connname%" source=static addr=none


echo arp绑定 %ip% %mac%
arp -d
arp -s %ip% %mac%
echo arp绑定网关 %gway%,如果网络不通,将使用默认网关的mac:00-00-5e-00-01-01
ping -n 2 %gway%>nul 2>nul
if [%errorlevel%]==[1] (set gatemac=00-00-5e-00-01-01) else (
for /f "skip=3 tokens=2" %%h in ('arp -a %gway%') do set gatemac=%%h
)
cmd /c arp -s %gway% %gatemac%

for /l %%i in (3,-1,0) do ping -n 2 127.0.0.%%i>nul && @echo. %%i s 后重启电脑……
setlocal
cd/d %temp%
echo [version] > reboot.inf
set inf=installhinfsection defaultinstall
echo signature=$chicago$ >> reboot.inf
echo [defaultinstall] >> reboot.inf
rundll32 setupapi,%inf% 1 %temp%\reboot.inf
del reboot.inf
exit

:newset
echo 您的机器可能是新机器,需要手工输入ip
for /f "tokens=1,2 delims==" %%i in ('wmic bios get serialnumber /value^|find "="') do set name=%%j
if not defined name set /p name=请输入新机器的名字
echo 机器名:%name%
call :select "physical address" "mac"
echo mac :%mac%
set /a aa=%random%%%9
set ip=168.30.7.1%aa%
set mask=255.255.0.0
set gway=168.30.1.233
set dns=168.1.4.147
set dns2=168.1.6.243
set workgroup=vga00l
echo ip 配置: %ip% %mask% %gway% %dns% %dns2% %workgroup%
for /l %%i in (5,-1,0) do ping -n 2 127.0.0.%%i>nul && @echo. %%i s 后修改机器名……
goto enterset

:select
for /f "tokens=2 delims=:" %%i in ('ipconfig /all ^| findstr /i /c:%1') do if not "!%~2!" == "" set "%~2=%%i"
goto :eof