Welcome

首页 / 编程脚本 / 利用vbs自动修改ip的代码

单位机房的系统需要重新安装,一共近300台设备,使用ghost网络克隆后,客户机重新设置ip是个麻烦的事情。我们使用的教学管理软件要求客户机必须有固定ip,单位5个机房如下(DNS:61.134.1.4,掩码为:255.255.255.0):

机房

起始ip

ip终止ip 

网关 

机器名 

工作组 

 1号 192.168.1.1100  254  No_100~No_160 S01
 2号 192.168.1.101 200 254  No_200~No_260 S02
 3号 192.168.3.1 80 254 No_300~No_360 S03
 4号 192.168.3.81 160 254 No_400~No_460 S04
 5号 192.168.3.161 240 254  No_500~No_560 S05

以下为vbs源码:
1.xp系统(测试通过,用户为Administrator,文件为E:fxp.vbs,启动组建立快捷方式fxp.lnk以便开机后自动运行一次)
复制代码 代码如下:
"/////主程序 
dim msginf,machname"定义变量:对话框,机器名 
msginf=msgbox("该程序只能执行1次,请在XP系统硬件安装完毕后执行!" &chr(13) & "是否继续?",65,"修改机器网络配置") "信息提示 
if msginf=1 then " 如果按确定,则 

machname=inputon() " 用函数inputon()分析 

if machname<>"quit" then " 如果返回值不等于"quit",则 
wmitoip(machname) " 运行函数wmitoip()设置机器信息 
mreboot()"重启机器 
end if 
end if 

"///重启机器 
sub mreboot() 
dim fso,f1,f2 
Set fso = CreateObject("Scripting.FileSystemObject") 

"删除启动组 
if fso.fileexists("C:Documents and SettingsAdministrator「开始」菜单程序启动fxp.lnk") then 
set f1=fso.getfile("C:Documents and SettingsAdministrator「开始」菜单程序启动fxp.lnk") 
f1.delete 
end if 

"删除vbs文件 
if fso.fileexists("e:fxp.vbs") then 
set f2=fso.getfile("e:fxp.vbs") 
f2.delete 
end if 

Set WshShell = Wscript.CreateObject("Wscript.Shell") 
"WshShell.Run ("shutdown.exe -r -t 5") " 重启 

end sub 

"///生成计算机名 
function inputon() " 函数inputon() 
dim t " 变量 
while true " 循环直到退出函数 
t=inputbox("按一下规则输入:" & chr(13) & chr(13) & "第1位代表机房号" & chr(13) & "第2、3位代表机器号" & chr(13) & "教师机用00代表" & chr(13) & "如:123代表1号机房23号机" & chr(13) & "请确保输入正确!!","请输入3位机器标识!","") " 输入机算机名,默认值为空 
if t="" then " 如果t等于空(按了取消键),则 
inputon="quit" " 返回值为"quit" 
exit function " 退出程序 
end if 
if len(t)=3 then " 计算机号的长度为3位 
if Cint(t)>=100 and Cint(t)<580 then " 验证 
inputon=t " 返回需要的计算机名 
exit function 
end if 
end if 
wend 
end function 


"///修改机器ip、掩码、网关、工作组、机器名 
sub wmitoip(t) 
strComputer="." 
strmask="255.255.255.0" 
Dim lt,rt" 变量 
dim ipv,gateway,lan "ip,网关,工作组 
lt=cint(left(t,1))"机号左1位数字值 
rt=cint(right(t,2)) " 机号右两位数字值 

if lt=1 or lt=2 then"判断网关 
gateway="192.168.1.254" 
else 
gateway="192.168.3.254" 
end if 

if lt=1 then "1号机房 
lan="S01" 
ipv="192.168.1." 
if rt=0 then "教师机 
ipv=ipv+"100" 
else"学生机 
ipv=ipv+Cstr(rt) 
end if 
end if 

if lt=2 then "2号机房 
lan="S02" 
ipv="192.168.1." 
if rt=0 then "教师机 
ipv=ipv+"200" 
else"学生机 
rt=rt+100 
ipv=ipv+Cstr(rt) 
end if 
end if 

if lt=3 then "3号机房 
lan="S03" 
ipv="192.168.3." 
if rt=0 then "教师机 
ipv=ipv+"80" 
else"学生机 
ipv=ipv+Cstr(rt) 
end if 
end if 

if lt=4 then "4号机房 
lan="S04" 
ipv="192.168.3." 
if rt=0 then "教师机 
ipv=ipv+"160" 
else"学生机 
rt=rt+80 
ipv=ipv+Cstr(rt) 
end if 
end if 

if lt=5 then "5号机房 
lan="S05" 
ipv="192.168.3." 
if rt=0 then "教师机 
ipv=ipv+"240" 
else"学生机 
rt=rt+160 
ipv=ipv+Cstr(rt) 
end if 
end if 

Set objWMIService=GetObject("winmgmts:\" & strComputer & " ootcimv2") 
Set colNetAdapters=objWMIService.ExecQuery("Select * from Win32_NetworkAdapterConfiguration where IPEnabled=TRUE") 
strIPAddress=Array(ipv) 
strSubnetMask=Array(strmask) 
strGateway = Array(gateway) "修改网关 
"strGatewayMetric = Array(1) "跃点数 
strDNS=Array("61.134.1.4") 

For Each objNetAdapter in colNetAdapters  
errEnable=objNetAdapter.EnableStatic(strIPAddress, strSubnetMask)"ip,掩码 
errGateways = objNetAdapter.SetGateways(strGateway) "网关 
errDns=objNetAdapter.SetDNSServerSearchOrder(strDNS)"dns 
Next 

Set objWMIService = GetObject("winmgmts:" _ 
    & "{impersonationLevel=impersonate}!\" & strComputer & " ootcimv2") 
Set colComputers = objWMIService.ExecQuery _ 
    ("Select * from Win32_ComputerSystem") 
For Each objComputer in colComputers 
    err = ObjComputer.Rename("No_" & t)"机器名 
    ReturnValue = objComputer.JoinDomainOrWorkGroup("S0" & left(t,1))"工作组   
Next 

end sub 



2.98系统

98系统可以生成ip.reg注册表文件,导入后就可以了,源码如下(主体思路,这次没有98系统,所以未完成,可参考xp系统的改进):


复制代码 代码如下:
"/////主程序 
dim msginf,machname"定义变量:对话框,机器名 
msginf=msgbox("生成注册表文件,是否继续?",65,"getreg") "信息提示 
if msginf=1 then " 如果按确定,则 

machname=inputon() " 用函数inputon()分析 

if machname<>"quit" then " 如果返回值不等于"quit",则 
setreg(machname) " 运行函数setreg()生成注册表ip.reg 
end if 
end if 

"///生成计算机名 
function inputon() " 函数inputon() 
dim t " 变量 
while true " 循环直到退出函数 
t=inputbox("按一下规则输入:" & chr(13) & chr(13) & "第1位代表机房号" & chr(13) & "第2、3位代表机器号" & chr(13) & "教师机用00代表" & chr(13) & "如:123代表1号机房23号机" & chr(13) & "请确保输入正确!!","请输入3位机器标识!","") " 输入机算机名,默认值为空 
if t="" then " 如果t等于空(按了取消键),则 
inputon="quit" " 返回值为"quit" 
exit function " 退出程序 
end if 
if len(t)=3 then " 计算机号的长度为3位 
if Cint(t)>=100 and Cint(t)<580 then " 验证 
inputon=t " 返回需要的计算机名 
exit function 
end if 
end if 
wend 
end function 

"///生成注册文件 
sub setreg(t) " 生成注册表,t为机器号 
Dim fso, f1,f2,lt,rt" 变量 
dim ipv,gateway,lan "ip,网关,工作组 
lt=cint(left(t,1))"机号左1位数字值 
rt=cint(right(t,2)) " 机号右两位数字值 

if lt=1 or lt=2 then"判断网关 
gateway="192.168.1.254" 
else 
gateway="192.168.3.254" 
end if 

if lt=1 then "1号机房 
lan="S01" 
ipv="192.168.1." 
if rt=0 then "教师机 
ipv=ipv+"100" 
else"学生机 
ipv=ipv+Cstr(rt) 
end if 
end if 

if lt=2 then "2号机房 
lan="S02" 
ipv="192.168.1." 
if rt=0 then "教师机 
ipv=ipv+"200" 
else"学生机 
rt=rt+100 
ipv=ipv+Cstr(rt) 
end if 
end if 

if lt=3 then "3号机房 
lan="S03" 
ipv="192.168.3." 
if rt=0 then "教师机 
ipv=ipv+"80" 
else"学生机 
ipv=ipv+Cstr(rt) 
end if 
end if 

if lt=4 then "4号机房 
lan="S04" 
ipv="192.168.3." 
if rt=0 then "教师机 
ipv=ipv+"160" 
else"学生机 
rt=rt+80 
ipv=ipv+Cstr(rt) 
end if 
end if 

if lt=5 then "5号机房 
lan="S05" 
ipv="192.168.3." 
if rt=0 then "教师机 
ipv=ipv+"240" 
else"学生机 
rt=rt+160 
ipv=ipv+Cstr(rt) 
end if 
end if 


Set fso = CreateObject("Scripting.FileSystemObject") 
if fso.fileexists("e:ip.reg") then 
set f2=fso.getfile("e:ip.reg") 
f2.delete 
end if "如果存在ip.reg,先删了 

set f1 = fso.CreateTextFile("e:ip.reg", True) " 建立文件ip.cfg 
"f1.WriteLine("REGEDIT4") " 以下为生成注册表 
f1.WriteLine("Windows Registry Editor Version 5.00") 
f1.WriteBlankLines(1) 
f1.WriteLine("[HKEY_LOCAL_MACHINESystemCurrentControlSetControlComputerNameComputerName]") 
f1.WriteLine(chr(34) & "ComputerName" & chr(34) & "=" & chr(34) & t & chr(34)) " 计算机名 
f1.WriteLine("[HKEY_LOCAL_MACHINESystemCurrentControlSetServicesClassNetTrans000]") 
f1.WriteLine(chr(34) & "IPAddress" & chr(34) & "=" & chr(34) & ipv & chr(34)) " IP 
f1.WriteLine("[HKEY_LOCAL_MACHINESystemCurrentControlSetServicesClassNetTrans000]") 
f1.WriteLine(chr(34) & "DefaultGateway" & chr(34) & "=" & chr(34) & gateway & chr(34)) " 网关 
f1.WriteLine("[HKEY_LOCAL_MACHINESystemCurrentControlSetServicesClassNetTrans000]") 
f1.WriteLine(chr(34) & "IPMask" & chr(34) & "=" & chr(34) & "255.255.255.0" & chr(34)) " 子网掩码 
f1.WriteLine("[HKEY_LOCAL_MACHINESystemCurrentControlSetServicesVxDVNETSUP]") 
f1.WriteLine(chr(34) & "Comment" & chr(34) & "=" & chr(34) & t & chr(34)) " 计算机说明 
f1.WriteLine("[HKEY_LOCAL_MACHINESystemCurrentControlSetServicesVxDVNETSUP]") 
f1.WriteLine(chr(34) & "ComputerName" & chr(34) & "=" & chr(34) & t & chr(34)) " 计算机名 
f1.WriteLine("[HKEY_LOCAL_MACHINESystemCurrentControlSetServicesVxDVNETSUP]") 
f1.Writeline(chr(34) & "Workgroup" & chr(34) & "=" & chr(34) & lan & chr(34)) " 工作组 
end sub