首页 > 编程 > VBScript > 正文

利用vbs自动修改ip的代码

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

机房

起始ip

ip终止ip

网关

机器名

工作组

 1号  192.168.1.1 100   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 Settings/Administrator/「开始」菜单/程序/启动/fxp.lnk") then  
set f1=fso.getfile("C:/Documents and Settings/Administrator/「开始」菜单/程序/启动/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 & "/root/cimv2")  
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 & "/root/cimv2")  
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_MACHINE/System/CurrentControlSet/Control/ComputerName/ComputerName]")  
f1.WriteLine(chr(34) & "ComputerName" & chr(34) & "=" & chr(34) & t & chr(34)) ' 计算机名  
f1.WriteLine("[HKEY_LOCAL_MACHINE/System/CurrentControlSet/Services/Class/NetTrans/0000]")  
f1.WriteLine(chr(34) & "IPAddress" & chr(34) & "=" & chr(34) & ipv & chr(34)) ' IP  
f1.WriteLine("[HKEY_LOCAL_MACHINE/System/CurrentControlSet/Services/Class/NetTrans/0000]")  
f1.WriteLine(chr(34) & "DefaultGateway" & chr(34) & "=" & chr(34) & gateway & chr(34)) ' 网关  
f1.WriteLine("[HKEY_LOCAL_MACHINE/System/CurrentControlSet/Services/Class/NetTrans/0000]")  
f1.WriteLine(chr(34) & "IPMask" & chr(34) & "=" & chr(34) & "255.255.255.0" & chr(34)) ' 子网掩码  
f1.WriteLine("[HKEY_LOCAL_MACHINE/System/CurrentControlSet/Services/VxD/VNETSUP]")  
f1.WriteLine(chr(34) & "Comment" & chr(34) & "=" & chr(34) & t & chr(34)) ' 计算机说明  
f1.WriteLine("[HKEY_LOCAL_MACHINE/System/CurrentControlSet/Services/VxD/VNETSUP]")  
f1.WriteLine(chr(34) & "ComputerName" & chr(34) & "=" & chr(34) & t & chr(34)) ' 计算机名  
f1.WriteLine("[HKEY_LOCAL_MACHINE/System/CurrentControlSet/Services/VxD/VNETSUP]")  
f1.Writeline(chr(34) & "Workgroup" & chr(34) & "=" & chr(34) & lan & chr(34)) ' 工作组  
end sub
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表