VBS-自动重启OS(多台)
Windows的环境如果你没有使用域环境那么在维护时如何重启多台服务器的系统呢?安装cygwin,然后用shell脚本重启,哦不,太麻烦了,而且多了一个cygwin的故障点。使用VBS最方便。
需要的东东有:Windows的ODBC,Mysql或者SQL Sever,VBS脚本一个
配置步骤:
1.MySql/SQL Sever建一张表,表名hosts,表的内容包括ip,username,passwd并且输入相应信息,如图:

如果不需要重启的server用#注释,如上图
2.配置ODBC
控制面板->管理工具->数据源 (ODBC)->系统DSN中如图添加:

3.将下面的VBS保存执行即可
'Write by john.lv
'e-mail:lvming104@hotmail.com
'if you have any questions, please contact me.
'get date
mydate=now
my_day = day(mydate)
my_month = month(mydate)
my_year=year(mydate)
my_date = my_year & my_month & my_day
'读取磁盘驱动器
Set fso = CreateObject("Scripting.FileSystemObject")
if fso.DriveExists("d:\")="True" then
getfso=fso.GetDrive("d:")
else
getfso=fso.GetDrive("e:")
end if
'判断log文件夹是否存在
if fso.folderExists(getfso&"\log")=Flase then
fso.CreateFolder(getfso&"\log")
end if
'判断reboot.log是否存在,保存在d:\log\或者e:\log\下
if fso.fileExists(getfso&"\log\reboot_"&my_date&".log")=Flase then
fso.CreateTextFile(getfso&"\log\reboot_"&my_date&".log")
set objNF=fso.OpenTextFile(getfso&"\log\reboot_"&my_date&".log",8)
'打开reboot_my_date.log文件
else
set objNF=fso.OpenTextFile(getfso&"\log\reboot_"&my_date&".log",8)
end if
'读取数据库密码
set objshell=CreateObject("WScript.Shell")
Input1 = InputBox("请输入重启服务器所需密码","身份验证")
'判断是否为空
if input1="" then
wscript.quit
else
checksum=input1
end if
Set objFSO = CreateObject("Scripting.FileSystemObject")
set objlocator=createobject("wbemscripting.swbemlocator")
Const SHUTDOWN = 1
'定义链接数据库信息
hosts="DSN=syslog;uid=syslog;pwd="&checksum
'uid登录数据库的用户名,pwd:密码
Set DbConn = CreateObject("ADODB.Connection")
DbConn.Open hosts
'记log
if CStr(Err.Number)<>"0" then
objNF.writeline "Error No:" & CStr(Err.Number) & " " & Err.Description
objNF.writeline ""
msgbox "Error No:" & CStr(Err.Number) & " " & Err.Description
wscript.quit
end if
'读取hosts中主机信息,去掉以#开头的
SQL="select ip,username,passwd from hosts where ip not like '#%'"
Set Rs=DbConn.execute(SQL)
if not(Rs.eof) Then
do while not Rs.eof
strComputer=rs(0)
username=rs(1)
password=rs(2)
'远程通过username,password连接服务器(WMI)
Set objWMIService = objlocator.connectserver(strComputer ,"root\cimv2",username,password)
'记log
if CStr(Err.Number)<>"0" then
'msgbox (strComputer&" Error No:" & CStr(Err.Number) & " " & Err.Description)
objNF.writeline "ip:"&strComputer&" Error No:" & CStr(Err.Number) & " " & Err.Description
objNF.writeline ""
else
Set colOperatingSystems = objWMIService.ExecQuery _
("Select * from Win32_OperatingSystem")
For Each objOperatingSystem in colOperatingSystems
ObjOperatingSystem.Reboot() '重启
Next
'记log
if CStr(Err.Number) ="0" then
objNF.writeline "ip:"&strComputer&" 重启时间:"&now
objNF.writeline ""
else
objNF.writeline "ip:"&strComputer&" Error No:" & CStr(Err.Number) & " " & Err.Description
objNF.writeline ""
end if
End if
'下移一条记录
rs.movenext
loop
objNF.close
'提示重启结果
if CStr(Err.Number)="0" then
msgbox "重启完成" '提示重启完成
else
msgbox ("Error No:" & CStr(Err.Number) & " 重启没有完成" )
end if
else
wscript.echo "没有查到host信息,请重新确认"
End if
Err.Clear '清除错误。
运行脚本时会出现如下图的提示框:(这样要求输入的是数据库的登录密码)

重启的log记录在d:\log\reboot_date.log或者e:\log\reboot_date.log
log范例如下:
#表示在提示框输入的数据库密码错误
ip:192.168.1.50 Error No:-2147023174 RPC 服务器不可用。
#ip地址错误或服务器无法连接
ip:192.168.100.100 Error No:-2147024891 拒绝访问。
#用户名或密码错误
ip:192.168.100.102 重启时间:2008-9-11 12:06:09
#重启成功并记录时间
ok,大功告成。
阅读内文 Tags: VBS;自动重启