Click Here

相信能,才能
  首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

利用vbs自动修改ip

Posted on 2006-07-13 00:24  鬼手  阅读(4722)  评论(2编辑  收藏  举报

单位机房的系统需要重新安装,一共近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=' 返回需要的计算机名
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=' 返回需要的计算机名
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