WEB开发网
开发学院数据库MSSQL Server ghost 后无需人工干预,全自动修改IP等设置的一些... 阅读

ghost 后无需人工干预,全自动修改IP等设置的一些思路及代码

 2007-11-11 06:35:41 来源:WEB开发网   
核心提示:原来开的网吧小,只有六十几台机器,ghost 后无需人工干预,全自动修改IP等设置的一些思路及代码,如果要重做系统,就每台机器ghost,以上程序在win98下运行通过,我现在网吧280台机子就是这样克的,然后启动改IP、网关等,没感到怎么费力

  原来开的网吧小,只有六十几台机器,如果要重做系统,就每台机器ghost,然后启动改IP、网关等,没感到怎么费力,现在的网吧有近300台,每次ghost后再改IP之类的,想想就头晕,于是写了个VBS,几个BAT,使机器克隆后能自动修改IP、标识、网关,工作组、CS-CDKEY、美萍的机号和注册号,就是说:ghost 后基本不用改配置,直接能用。本人在网盟属资深潜水员,偶尔出水换气,将思路和程序献上,希望批评指正!
  网吧ghost 无非以下几种:
1、单机克隆,文件到分区:
  简单、快速,推荐使用。一个系统备份也就300~400兆,不占多少硬盘空间,一旦系统有问题恢复容易。
2、单机克隆,分区到分区(不开机箱):
  从服务器复制系统备份然后克隆,用于系统更新。优点:想克哪台克哪台,不受顾客上机限制,不拖网速。
3、单机克隆,分区到分区(开机箱):
  从母盘克隆系统,一般用于系统更新,要开机箱,不推荐。
4、单机克隆,DISK TO DISK:
  你不觉得累吗?
5、多机克隆,文件到分区:
  批量更新系统,好处多多,就是改IP有点烦,哦!
6、多机克隆,盘到盘:
  汗,不得已而为之。

不管是哪种克隆,思想差不多,就是在非系统盘(如e:\ghostbak\)放以下几个文件:
1、系统的ghost备份(如win98.gho),如果有不同的机器配置也放在一起(如win98A.gho、win98B.gho、win98C.gho)
2、ip.reg:IP、标识、网关,工作组、CS-CDKEY、美萍机号和注册号的注册表文件。下面介绍。
3、st.bat:用于第1、2种情况。下面介绍。
4、ghost.exe:少了它什么也不能干!

ip.reg内容:
REGEDIT4

;计算机名(如zx001,zx123)
[HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\ComputerName\ComputerName]
"ComputerName"="zx203"
;IP:
[HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Class\NetTrans\0000]
"IPAddress"="192.168.0.203"
;网关:
[HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Class\NetTrans\0000]
"DefaultGateway"="192.168.0.15"
;计算机说明:
[HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\VxD\VNETSUP]
"Comment"="zx203"
;计算机名:
[HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\VxD\VNETSUP]
"ComputerName"="zx203"
;工作组(大型网吧最好多分几个):
[HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\VxD\VNETSUP]
"Workgroup"="lan3"
;CS-CDKEY
[HKEY_CURRENT_USER\Software\Valve\CounterStrike\Settings]
"key"="2317233759548"
;美萍机号:
[HKEY_LOCAL_MACHINE\Software\Mpsoft\Smenu]
"computernum"="203"
;美萍注册码:
[HKEY_LOCAL_MACHINE\Software\Mpsoft\Smenu\Reg]
"RegNum"=dword:00019DB6

getreg.vbs内容(自动生成以上注册表文件):

dim msginf,bkey,machname
msginf=msgbox("提取注册表文件,是否继续?",65,"getreg")    '信息提示
if msginf=1 then        ' 如果按确定,则
Set WshShell = WScript.CreateObject("WScript.Shell")
bKey = WshShell.RegRead("HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\ComputerName\ComputerName\ComputerName") ' 提取机算机名到变量bKey
machname=inputon(bkey)      ' 用函数inputon()分析
if machname<>"quit" then   ' 如果返回值不等于"quit",则
 setreg(machname)   ' 运行函数setreg()生成注册表ip.reg
 backtoserver(machname)        ' 将ip.reg 文件备份到服务器(绝对有用)
end if
end if

function inputon(t1)     ' 函数inputon()
  dim lt,rt,t2       ' 变量
  while true        ' 循环直到退出函数
  t2=inputbox("请输入机器标识!","输入",t1)  ' 输入机算机名,默认值为现在的计算机名
    if t2="" then            ' 如果t2等于空(按了取消键),则
   inputon="quit"  ' 返回值为"quit"
   exit function                ' 退出程序
    end if
if len(t2)=5 then         ' 计算机号的长度,本网吧必须为5位
 lt=left(LCase(t2),2)    ' lt 等于前二位
 rt=right(LCase(t2),3)    ' rt 等于后三位
 if lt="zx" and rt<>"" and Cint(rt)>=0 and Cint(rt)<=280 then ' 验证
  inputon=t2      ' 返回需要的计算机名
  exit function
 end if
end if
  wend
end function

sub setreg(t)     ' 生成注册表
 Dim fso, f1,f2,rt,ipt,pt,gateway,lan,cskey,mpkey  ' 变量
rt=cint(right(t,3))     ' 机号转换为数字值

if rt>140 then
 ipt=0
else
 ipt=1
end if            ' 大于140号,IP:192.168.0.X 小于140号,IP:192.168.1.X

if (rt>=1 and rt<=39) or (rt>=223 and rt<=280) then
 lan="lan1"
elseif (rt>39 and rt<=140) then
 lan="lan2"
elseif (rt>140 and rt<223) then
 lan="lan3"
end if          ' 根据不同的机号设置工作组

if (rt>=1 and rt<=140) or (rt>=223 and rt<=280) then
 gateway=rt mod 4
 if gateway=0 then
  gateway=4
 end if
 gateway=1 & gateway
else
 gateway=rt mod 2
 if gateway=1 then
  gateway=15
 elseif gateway=0 then
  gateway=16
 end if
end if    ' 根据不同的机号设置网关

pt=rt
if pt=200 then
 pt=252
end if
if pt=250 then
 pt=253
end if     ' 历史原因,ip 200和250被服务器用了,改为252,253
Set fso = CreateObject("Scripting.FileSystemObject")
if fso.fileexists("e:\ghostbak\ip.reg") then
 set f2=fso.getfile("e:\ghostbak\ip.reg")
 f2.delete
end if      ' 如果存在ip.reg,先删了

cskey=getcskey()   ' 函数getcskey() 得到CS的CDKEY
mpkey=getmpkey()  ' 函数getmpkey()得到美萍的CDKEY

set f1 = fso.CreateTextFile("e:\ghostbak\ip.reg", True) ' 建立文件ip.cfg
f1.WriteLine("REGEDIT4")       ' 以下为生成注册表
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) & "192.168." & ipt & "." & pt & chr(34))  ' IP
f1.WriteLine("[HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Class\NetTrans\0000]")
f1.WriteLine(chr(34) & "DefaultGateway" & chr(34) & "=" & chr(34) & "192.168.0." & 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.254.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))   ' 工作组
f1.WriteLine("[HKEY_CURRENT_USER\Software\Valve\CounterStrike\Settings]")
f1.WriteLine(chr(34) & "key" & chr(34) & "=" & chr(34) & cskey & chr(34)) ' CS-CDKEY
f1.WriteLine("[HKEY_LOCAL_MACHINE\Software\Mpsoft\Smenu]")
f1.WriteLine(chr(34) & "computernum" & chr(34) & "=" & chr(34) & rt & chr(34)) ' 美萍机号
f1.WriteLine("[HKEY_LOCAL_MACHINE\Software\Mpsoft\Smenu\Reg]")
f1.WriteLine(chr(34) & "RegNum" & chr(34) & "=dword:" & mpkey) ' 美萍注册码
end sub

function getmpkey() ' 函数getmpkey()得到美萍的CDKEY
dim mpkey,lenmpkey
Set WshShell = WScript.CreateObject("WScript.Shell")
mpkey=hex(WshShell.RegRead("HKEY_LOCAL_MACHINE\Software\Mpsoft\Smenu\Reg\RegNum"))
mpkey="0000" & mpkey
getmpkey=mpkey
end function

' 函数getcskey() 从服务器的\\Server\系统更新\cs-cdkey.txt文件得到CS的CDKEY(随机)
function getcskey()    
  dim fso,ts,rndnumb,count
  Randomize
  rndnumb=Int(100 * Rnd + 1)
  Set fso = CreateObject("Scripting.FileSystemObject")
  Set ts = fso.OpenTextFile("\\Server\系统更新\cs-cdkey.txt", 1)
  for count=1 to rndnumb
ts.skipline
  next
  getcskey=trim(ts.ReadLine)
end function

function backtoserver(t)      ' 将ip.reg 文件备份到服务器
Set fso = Wscript.CreateObject("Scripting.FileSystemObject")
if fso.fileexists("e:\ghostbak\ip.reg") then
set c=fso.getfile("e:\ghostbak\ip.reg")
c.copy ("\\Server\系统更新\ip\" & t & ".reg")
end if
end function

cs-cdkey.txt 文件内容(共100个,每行一个)
2696734026608
5498338402186
3865568763903
2696734026608
1154247940716
   .
      .

OK,以上完成了,以后只要想办法在克隆重启后自动运行ip.cfg,就可以了:
更改系统盘的autoexec.bat为如下:
@echo off
if exist e:\ghostbak\ip.reg goto setreg
goto end

:setreg
regedit e:\ghostbak\ip.reg
del e:\ghostbak\ipcfg.reg
ren e:\ghostbak\ip.reg ipcfg.reg

:end
知道了吗,只要e:\ghostbak\下存在ip.reg,就导入注册表,然后改名为ipcfg.reg。

思路已经明确,接下来针对ghost 的六种不同情况只要略微改变一下程序就能全部自动执行了:
1、单机克隆,文件到分区:
  运行gst.bat  内容如下:
ren e:\ghostbak\ipcfg.reg ip.reg
: 先format ,省得ghost 后再对C盘查错
format c: /s/u/autotest       
e:\ghostbak\ghost.exe -clone,mode=pload,src=e:\ghostbak\ghost\win98.gh1,dst=1:1 -sure -fx -rb

2、单机克隆,分区到分区(不开机箱):
  在getreg.vbs 的backtoserver()函数后在加上以下代码:
copyfiles(machname)     ' 函数copyfiles() 从服务器复制需要的文件到客户端
Set WshShell = Wscript.CreateObject("Wscript.Shell")
WshShell.Run ("\\Server\系统更新\shutdown.exe -r") ' shutdown.exe 关机宝,网上找

sub copyfiles(t)
dim sys,gho,mpmenu,mplan,mpnet,mpsingle
sys="\\Server\系统更新\"     ' 服务器路径
rt=cint(right(t,3))    ' 提取机号
if (rt>=28 and rt<=140) or rt=23 then
 gho="win98A.gho"
elseif (rt>140 and rt<179) or (rt>=1 and rt<=21) or (rt>=24 and rt<=27) or rt=22 then
 gho="win98B.gho"
elseif (rt>=179 and rt<=280) then
 gho="win98C.gho"
end if          ' 根据不同的配置复制不同的备份文件

Set fso = Wscript.CreateObject("Scripting.FileSystemObject")
if fso.fileexists(sys & gho) then
set c=fso.getfile(sys & gho)
c.copy ("e:\ghostbak\win98.gho")
end if      ' 开始复制

Set fso = Wscript.CreateObject("Scripting.FileSystemObject")
if fso.fileexists(sys & "autoexec.bat") then
set c=fso.getfile(sys & "autoexec.bat")
c.copy ("c:\autoexec.bat")
end if      ' 把服务器上的autoexec.bat 覆盖c:盘的,用以重启后自动开始ghost

end sub

服务器上的autoexec.bat 内容:
format c: /s/u/autotest       
e:\ghostbak\ghost.exe -clone,mode=pload,src=e:\ghostbak\ghost\win98.gh1,dst=1:1 -sure -fx -rb
很简单吧,就是开始ghost。

3、单机克隆,分区到分区(开机箱):
  说了不推荐,早干什么去了,为什么不留备份呢?不过你一定要用也没关系,方法同1,只要改下ghost参数。

4、单机克隆,DISK TO DISK:
 还是觉得累,方法同6

5、多机克隆,文件到分区:
  写个批处理啊,net use 连到服务器后复制 ip.cfg到e:\ghostbak 如:
ghost.bat内容:
;网卡dos 驱动
;net 到服务器e:\ghostbak 为F:
copy f:\ip\%1.reg e:\ghostbak\ip.reg /y
;开始ghost
运行时加参数如100号机就是:ghost.bat zx100

6、多机克隆,盘到盘:
 a. 将ip目录(就是备份所有客户端注册表文件的目录)放到母盘e:\ghostbak  b. 增加selectip.vbs 内容如下:
dim t,lt,rt
while true
t=inputbox("请输入机器标识!","输入")    ' 输入机号
if len(t2)=5 then 
 lt=left(LCase(t2),2)
 rt=right(LCase(t2),3) 
 if lt="zx" and rt<>"" and Cint(rt)>=0 and Cint(rt)<=280 then 
 Set fso = Wscript.CreateObject("Scripting.FileSystemObject")
 if fso.fileexists("e:\ghostbak\ip\" & t & ".reg") then
 set c=fso.getfile("e:\ghostbak\ip\" & t & ".reg") ' 根据机号得到相应注册表文件
 c.copy ("e:\ghostbak\ip.reg")    ' 复制注册表文件
 set c=fso.getfile("C:\WINDOWS\Start Menu\Programs\启动\selctip.lnk")
 c.delete   ' 删除启动项中本程序
 Set fso = Wscript.CreateObject("Scripting.FileSystemObject")
 fso.DeleteFolder("e:\ghostbak\ip")    ' 删除ip目录
 Set WshShell = Wscript.CreateObject("Wscript.Shell")
 WshShell.Run ("regedit /s e:\ghostbak\ip.reg")  ' 运行注册表文件
 WshShell.Run ("\\Server\系统更新\shutdown.exe -r")  ' 重启
end if 
wend
注1:母盘建立selectip.vbs的快捷方式selectip.lnk在启动组,开机后就运行,运行时删除此快捷方式。
注2:母盘的子网掩码取:255.255.255.254,避免克隆后一起重启网络冲突。


以上程序在win98下运行通过,我现在网吧280台机子就是这样克的,希望对大家有所帮助。

Tags:ghost 无需 人工

编辑录入:coldstar [复制链接] [打 印]
赞助商链接