询问者
使用脚本自动备份活动目录(原创)

常规讨论
-
'该脚本利用Windows自带的NTBackup备份系统状态,并建立日志文件,备份文件路径和保存备份的天数在命令行参数中获得,备份将以当前时间命名。把主机的脚本宿主改为CScript,在命令行运行,给与参数。可以使用计划任务执行该命令,用以自动备份系统状态
On Error Resume Next
'从命令行获得参数,参数1:备份放置的目录、2:备份保留的时间
strFloder = Wscript.Arguments(0)
HowOld=Cint(Wscript.Arguments(1))
'定义备份日志文件名
StrBackupLogName="SystemBackup.txt"
Set objFSO = CreateObject("Scripting.FileSystemObject")
'如果已有备份日志文件存在,检测文件大小,如果大于10M则备份该文件,将名字改为“-1”后缀,并删重新建一个新文件。如果文件不存在则建立一个。
If objFSO.FileExists(strFloder&StrBackupLogName) Then
set objFilePro=objFSO.GetFile(strFloder&StrBackupLogName)
if objFilePro.Size/1024/1024>10 then
objFSO.CopyFile strFloder&StrBackupLogName,strFloder&StrBackupLogName&"-1",True
objFSO.DeleteFile strFloder&StrBackupLogName,True
objFSO.CreateTextFile(strFloder&StrBackupLogName)
end if
else
objFSO.CreateTextFile(strFloder&StrBackupLogName)
end if
On Error Resume Next
Set objFile=objFSO.OpenTextFile(strFloder&StrBackupLogName,8)
Dim oShell
objFile.writeLine ("=============================")
objFile.writeLine ("NtBackup(SystemState) start at "&now)
set oShell= Wscript.CreateObject("WScript.Shell")
'在命令行运行NTBackup程序,备份系统状态,备份的文件名为当前的日期,在备份完成后,扫描当前目录BKF后缀文件,根据文件名判断备份的日期,如果该日期和当前日期相差超过第二个参数定义的天数,那么删除该备份文件。
oShell.Run "ntbackup.exe backup systemState /m normal /j 'Command Line Backup' /f "&strFloder&Date&".bkf",,True
objFile.writeLine ("NtBackup(SystemState) stop at "&now)
Set Folder = objFSO.GetFolder(strFloder)
Set FileList = Folder.Files
For Each File in FileList
'用“.”隔开文件名,取得文件名前缀
FileName_Arr=split(File.Name,".")
if FileName_Arr(1)="bkf" then
'判断两个日期的天数差,如果大于参数2定义的天数,将被删除。
DiffDay=datediff("d",FileName_Arr(0),date)
if DiffDay>HowOld then
DelFileName=File.Name
objFSO.deletefile(strFloder&File.Name)
objFile.writeLine ("Delete BackupFile "&DelFileName&" at "&now&" bacuse the file is "&DiffDay&" days old >"&HowOld&"days")
end if
end if
Next
'------------------------------结束
将文件保存为backup.vbs,放于C盘
在计划任务中执行如下任务:C:\backup.vbs E:\SystemBackup\ 30
表示将系统状态备份到E:\SystemBackup,备份保留30天
Script Guy 学任何一样东西,先了解原理(How do),这样可以少走很多弯路。
全部回复
-
首先要确认粘帖过去的代码是否有多余的回车,特别是注解的中文,其次该脚本是要输入执行参数的。
这个是我公司所在服务上执行代码的部分日志。
=============================
NtBackup(SystemState) start at 2009-4-25 0:00:01
NtBackup(SystemState) stop at 2009-4-25 0:02:56
Delete BackupFile 2009-3-21.bkf at 2009-4-25 0:02:56 bacuse the file is 35 days old >30days
=============================
NtBackup(SystemState) start at 2009-5-2 0:00:01
NtBackup(SystemState) stop at 2009-5-2 0:03:23
Delete BackupFile 2009-3-28.bkf at 2009-5-2 0:03:24 bacuse the file is 35 days old >30days
=============================
NtBackup(SystemState) start at 2009-5-9 0:00:01
NtBackup(SystemState) stop at 2009-5-9 0:03:12
Delete BackupFile 2009-4-4.bkf at 2009-5-9 0:03:12 bacuse the file is 35 days old >30days
=============================
NtBackup(SystemState) start at 2009-5-16
NtBackup(SystemState) stop at 2009-5-16 0:03:19
Delete BackupFile 2009-4-11.bkf at 2009-5-16 0:03:19 bacuse the file is 35 days old >30days
=============================
NtBackup(SystemState) start at 2009-5-23
NtBackup(SystemState) stop at 2009-5-23 0:03:06
Delete BackupFile 2009-4-18.bkf at 2009-5-23 0:03:06 bacuse the file is 35 days old >30days
=============================
NtBackup(SystemState) start at 2009-5-30
NtBackup(SystemState) stop at 2009-5-30 0:02:54
Delete BackupFile 2009-4-25.bkf at 2009-5-30 0:02:54 bacuse the file is 35 days old >30days
学任何一样东西,先了解原理(How do),这样可以少走很多弯路。 -
代码是可以用的,你上面没看清楚啊,要输入参数啊,比如该代码保存为c:\backup.vbs,那么你要调用的话就要用如下格式,c:\backup d:\ 30 ,意思为将备份保存在D:\盘下,保存时间为30天,我将代码在我的XP上有运行了一遍,是可以的。(在域控制器上一直可用,唯一区别是我在域控制器上把该脚本封装成exe的了,这个应该没有影响的啊)
日志如下:
=============================
NtBackup(SystemState) start at 2009-6-10 9:57:39
NtBackup(SystemState) stop at 2009-6-10 9:59:26
备份文件500多M。- 已编辑 x86 plus 2009年6月10日 2:05
-
1、首先将该文件从开始到
'------------结束
为止保存到txt,假设文件所在c:,名称为sysBackup.txt。
2、将该文件改名为.vbs,即为sysBackup.vbs
3、在命令行(cmd)中执行c:\sysBackup.vbs d:\ 30
程序是绝对可以执行的。
'++++++++++++++一些注解
strFloder = Wscript.Arguments(0)
HowOld=Cint(Wscript.Arguments(1))
strFloder 变量是接受命令行传入参数1
HowOld变量是接受命令行传入参数2
例如:该脚本在C盘的名字是backup.vbs ,那么该命令可写成c:\sysBackup.vbs d:\ 30
"d:\"表示参数1,说明备份文件存放的路径
"30"是参数2,说明备份要保持的天数
其他的注解已经写的比较明白了。
象"set oShell= Wscript.CreateObject("WScript.Shell")”这种语句是创建对象,这个是创建Shell对象,该对象用来执行命令行程序例如cmd下面的命令,ntbackup就是用该对象来执行的。还有一般性的问题请查看wscript手册,如有人需要CHM版本可发邮件给我(不是天天看邮件,相应会比较慢)
学任何一样东西,先了解原理(How do),这样可以少走很多弯路。qq:769308501