易本地工作室-Ebend Software&Network Studio - 群发,采集,管理类软件定制开发服务【易本地工作室】
本工作室提供信息采集,管理,群发类软件定制服务,6年软件定制经验!

通过VBS脚本实现服务器远程备份

脚本名称:远程备份文件

脚本语言:VBS

原创作者:易本地工作室 艾云超

官方网站:易本地工作室

授权状态:免费

功能说明:通过VBS脚本实现多台服务器的远程备份功能,脚本中的许多模块可能会有人需要,VBS是实现WINDOWS服务器系统自动化运行很好的脚本语言,这个脚本中包含许多常用的过程或者函数,希望对大家写VBS脚本有帮助

脚本下载:暂不提供下载,请直接复制源码另存为VBS文件即可


Option Explicit 
On Error Resume Next
Dim iThread,iThreadCount '同时执行的任务数
Dim sBakFilePath,sFilePathList(99),sFinishedFilePathList(99),sSaveFilePath,sIdStart,sIdEnd
Dim sStrTemp
Dim FileID '文件段ID循环
Dim Shell,sRoboCopy '构建命令行参数
Dim Fso,f,fId '文件操作
Dim tNow,tStopTime
Dim N,M,I,J '计数和循环变量
Dim sFree,iAlarmFreeSpace '报警硬盘空闲空间

iThread=1 '同时执行的脚本数
iThreadCount=1 '任务计数
tStopTime=8 '8表示八点,整点计算简单
N=0 '计数
M=0 '
sIdStart =0 '开始段ID
sIdEnd = 999 '结束段ID
iAlarmFreeSpace=500000'单位为M
Set Fso = CreateObject("Scripting.FileSystemObject")
Set f=fso.OpenTextFile("C:\StopID.log",1,True) '检测上次关闭的ID记录
If f.atEndofstream=False Then
sIdStart=CInt(f.readline)
End If
f.close

Set f=fso.OpenTextFile("C:\ServerList.txt",1,True) '获取备份服务器列表
Do until f.atEndofstream
sFilePathList(N)=CStr(f.readline)
WScript.Echo CStr(now) & " Server:" & sFilePathList(N)
N=N+1
loop
f.close

Set f=fso.OpenTextFile("C:\FinishedServer.log",1,True) '获取已完成的服务器列表
Do until f.atEndofstream
sFinishedFilePathList(M)=CStr(f.readline)
WScript.Echo CStr(now) & " Finished:" & sFinishedFilePathList(M)
M=M+1
Loop
f.close
For I=0 To N-1 '循环服务器列表
sStrTemp=split(sFilePathList(I),"|")
sBakFilePath =sStrTemp(0)
sSaveFilePath=sStrTemp(1)'根据远程路径构造本地备份目录路径
For J=0 To M-1 '检测该服务器是否已完成
If sBakFilePath=sFinishedFilePathList(J) Then
Exit For '已完成列表中存在该路径就跳出循环
End If
Next

If J=M Then 'J=M表示之前的循环执行完毕,中途没有中断,即没有搜索到
Sendmail "文件备份通知:任务"&sBakFilePath&"开始","通知:服务器"&sBakFilePath&"备份开始,本地保存位置:"&sSaveFilePath&"段号范围:"& CStr(sIdStart) & " - " & CStr(sIdEnd)&" 请注意观察其状态"

Set f=fso.OpenTextFile("C:\BakFileSyn_" & Replace(sBakFilePath,"\","_") & ".log",8,True) '日志路径
Set Shell = WScript.CreateObject("WScript.Shell")

ShowMsg CStr(now) & " Remote:" & sBakFilePath
ShowMsg CStr(now) & " Local:" & sSaveFilePath
ShowMsg CStr(now) & " ID Range:" & CStr(sIdStart) & " - " & CStr(sIdEnd)
ShowMsg "*********************************************************"

For FileID=sIdStart to sIdEnd '开始循环ID
sFree=Trim(GetFreeSpace("localhost", iAlarmFreeSpace, Mid(sSaveFilePath,1,2)))
If sFree<> "" Then '检测磁盘剩余空间
Sendmail "文件备份报警:本地磁盘"&Mid(sSaveFilePath,1,2)&"空间不足["&sFree&"M]","报警:备份脚本在进行"&sBakFilePath&"(段号:"&Cstr(FileID)&")[Save:"&sSaveFilePath&"]发现磁盘空间不足["&sFree&"M],请登陆服务器查看详细情况!以免造成备份失败!"
End If
ShowMsg CStr(now) & " FreeDisk:" & sFree&"M"

Set fId=fso.OpenTextFile("C:\StopID.log",2,True) '记录当前ID进度
fId.WriteLine CStr(FileID)
fId.close
tNow=Hour(Now)'当前系统时间
If tNow>=tStopTime And tNow<12 Then
ShowMsg CStr(now) & " Time Up!"& CStr(FileID)
f.close
Sendmail "文件备份报警:任务"&sBakFilePath&"因为时间限制["&CStr(tStopTime)&"点]被强制终止","报警:服务器"&sBakFilePath&"备份被终止,本地保存位置:"&sSaveFilePath&"段号范围:"& CStr(sIdStart) & " - " & CStr(sIdEnd)&" 当前执行段号:"&CStr(FileID)&" 强制终止任务时间:"&CStr(tStopTime)&"点"
Wscript.Sleep 6000 '延时关闭
WScript.quit '时间符合
End If

ShowMsg CStr(now) & " ID:" & CStr(FileID) & " Start!"
'开始构建复制命令
sRoboCopy="robocopy "
sRoboCopy=sRoboCopy & sBakFilePath & "f" & right("000" & FileID,3) & "\ "'构造远程备份源路径
sRoboCopy=sRoboCopy & sSaveFilePath & "f" & right("000" & FileID,3) & "\ " '构造本地保存路径
sRoboCopy=sRoboCopy & "/MIR" '这个参数是复制时包含子目录
ShowMsg CStr(now) & " Shell:" & sRoboCopy

If iThreadCount>=iThread Then '控制同时打开的任务数
Shell.Run sRoboCopy,1,True '等待任务完成
iThreadCount=1
Else
Shell.Run sRoboCopy,1,False '不等待任务完成
iThreadCount=iThreadCount+1
End If

ShowMsg CStr(now) & " ID:" & CStr(FileID) & " Done!"
ShowMsg "*********************************************************"
Next
Set fId=fso.OpenTextFile("C:\StopID.log",2,True) '这里是重置日志记录的ID
fId.WriteLine CStr(0)
fId.close
sIdStart=0
Set fId=fso.OpenTextFile("C:\FinishedServer.log",8,True) '这里是记录完成的服务器进度
fId.WriteLine sBakFilePath
fId.close
Sendmail "文件备份通知:任务"&sBakFilePath&"完成","通知:服务器"&sBakFilePath&"备份完成,本地保存位置:"&sSaveFilePath
f.close
End If
Next
Sendmail "文件备份通知:所有任务完成","通知:所有服务器任务备份完成,请注意观察"

'********************自定义过程与函数******************************
Function GetFreeSpace(strComputer, ln, dev) '检测指定计算机的指定磁盘空闲空间
On Error Resume Next
Dim objWMIService, colDiskDrives, objDiskDrive,sql
Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
sql = "Select * from win32_perfformatteddata_perfdisk_logicaldisk where Name <> '_Total' and Name = '"&Trim(dev)&"'"
Set colDiskDrives = objWMIService.ExecQuery(sql)
For Each objDiskDrive In colDiskDrives
If CLng(objDiskDrive.FreeMegabytes) < CLng(ln) And objDiskDrive.Name = dev Then GetFreeSpace = strComputer&"("&dev&"):"&CStr(objDiskDrive.FreeMegabytes) '空间不足,返回计算机名(磁盘):剩余空间
Next
End Function

Function Sendmail(Subject,TextBody) '发送邮件
On Error Resume Next
Dim objEmail
Dim strname
strname = "http://schemas.microsoft.com/cdo/configuration/"
Set objEmail = CreateObject("CDO.Message")
Sendmail = False
objEmail.From ="adobo@163.com"'"Request@xici.net"
objEmail.To = "yunchao.ai@corp.elong.com"
objEmail.Subject = Subject
objEmail.textbody = TextBody
objEmail.Configuration.Fields.Item(strname & "sendusing") = 2
objEmail.Configuration.Fields.Item(strname & "smtpserver") = "smtp.163.com"'"mx.xici.net"
objEmail.Configuration.Fields.Item(strname & "smtpserverport") = 25
objEmail.Configuration.Fields.Item(strname & "smtpauthenticate") = 1
objEmail.Configuration.Fields.Item(strname & "sendusername") ="adobo@163.com"'"Request@xici.net"
objEmail.Configuration.Fields.Item(strname & "sendpassword") ="411117@@@@@"'""
objEmail.Configuration.Fields.Update
objEmail.send
If err.number<>0 Then
Set fId=fso.OpenTextFile("C:\SendMail.log",8,True) '邮件报错日志
WScript.Echo CStr(now) &" "& Cstr(Err.Number)&":"&(Err.Description)
fId.WriteLine CStr(now) &" "& Cstr(Err.Number)&":"&(Err.Description)
fId.close
End If

End Function
Sub ShowMsg(sShowStr) '显示和记录日志
On Error Resume Next
WScript.Echo sShowStr
f.WriteLine sShowStr
End Sub

标签:VBS服务器状态系统自动化
分类:源码教程| 发布:adobo| 查看: | 发表时间:2012/11/15
原创文章如转载,请注明:转载自易本地工作室-Ebend Software&Network Studio http://www.ebend.net/
本文链接:http://www.ebend.net/post/BakServerFileWithVBS.html

已经有 ( 0 ) 位网友发表了评论,你也评一评吧!