Board logo

标题: WINDOWS Eventlog每日備份Scripts腳本 [打印本页]

作者: ymtien     时间: 2006-10-21 05:52    标题: WINDOWS Eventlog每日備份Scripts腳本

前言:
在管理windows平台的服務器時,常常在系統發生問題或是服務器上運行的服務發生異常時,我們第一個一定是先打開"事件檢查器"來查看Eventlog,查看是不是有異常的訊息產生,但是windows的log產生默認下是不會以日期來自動備份的,往往要找一個問題都要在一堆log裡翻呀找呀,好不方便,如果能夠每天在午夜12點59分整以全文字檔備份每天的eventlog,那我們就可以在問題發生時,把我們要查找的eventlog以照日期調閱出來,方便又快速~以下小弟我就寫了一個很小但又方便的dos scripts提供給大家參考囉!

一.實作:
首先scripts的組成有以下三個檔案
1.Dump_eventlog.cmd  -->這支Scripts是把eventlog Dump出來共以全文字檔 txt來存檔

2.dumpel.exe -->這是一支工具程式,因為如果用windows內建的匯出eventlog功能,匯出來的後綴檔名是.evt,以文字編程工具打開來會是亂碼,一定要用windows的事件檢查器打來看才行,那就太煩人了,所以我們用這支程式加上上一支scripts就可以匯出後綴檔名為.txt的log檔,要查看就方便多了!

3.del_eventlog.vbs -->這支是用wsh編程編寫的scripts,功用是清空系統的eventlog記錄,有人要問了,我們不是要備份log嗎為什麼需要這支來刪除呀!
還記得剛才說的嗎?我們是要備份每天的系統Log檔,所以用排程排定在每天的午夜12:59備份系統Log後,就利用這支scripts清空系統裡舊的log,那樣我們每天備份的eventlog就會是完完整整的一整天,而不是好幾天混雜在一起的log備份!

二.代碼說明
接下來我就要解說代源的寫法囉

1.Dump_eventlog.cmd  

---------------------------------- 源代碼 ------------------------------------------------------------
@echo Off
mkdir %DATE:~0,4%-%DATE:~5,2%-%DATE:~8,2%
@echo ******* start Backup Eventlog ******
dumpel -s 127.0.0.1 -l system -f %DATE:~0,4%-%DATE:~5,2%-%DATE:~8,2%/system.log
dumpel -s 127.0.0.1 -l application -f %DATE:~0,4%-%DATE:~5,2%-%DATE:~8,2%/application.log
dumpel -s 127.0.0.1 -l security -f %DATE:~0,4%-%DATE:~5,2%-%DATE:~8,2%/security.log
@echo ******* Finish Backup Eventlog ******
star /min del_eventlog.vbs
---------------------------------------------------------------------------------------------------------
說明:
代碼不含上下二條虛線喔!第二行是我們要建立一個以日期為名稱的資料夾
因為windows的date抓取的日期變數會是2005/02/23 星期三"這樣的文字,其內的斜線(/)或減號(-)都是用做命令列的選項符號,這樣的組合可能會造成錯誤。
在此最簡單的方法便是用環境變數的擴充功能了,用%DATE:~0,4%-%DATE:~5,2%-%DATE:~8,2%,我們就可以抓取以2006-10-20這種格式的日期,4~6行則是利用dumpel 這支程式把 security 、application 、system 三項log記錄匯出來以txt檔備份到以當天日期命名的資料夾裡,ip我是用本機,請依照自己的需要改成你自己主機的ip,star /min del_eventlog.vbs這行則是在備份完之後清空系統的log記錄,原因,前面我們己經說過了!把上面的源碼copy並存成.bat或.cmd的檔名就可以了!


2.del_eventlog.vbs
-------------------------------------源代碼-----------------------------------------------------------
'刪除Evenlog
strComputer= "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate,(Backup)}!\\" & _
strComputer & "\root\cimv2")
dim mylogs(3)
mylogs(1)="application"
mylogs(2)="system"
mylogs(3)="security"
for Each logs in mylogs
Set colLogFiles=objWMIService.ExecQuery _
("Select * from Win32_NTEventLogFile where LogFileName='"&logs&"'")
For Each objLogfile in colLogFiles
objLogFile.ClearEventLog()
Next
Next
---------------------------------------------------------------------------------------------------------
說明:
代碼不包含上下二條虛線喔!這支是清空系統eventlog的wsh編程 scripts,這裡就不多做介紹了,有興趣可以到微軟的腳本範例網站看看,上面有對wsh的做很多的介紹也有範例檔可下來研究!
http://www.microsoft.com/china/technet/community/scriptcenter/default.mspx

以上三支scripts我有提供我寫好的碼代碼在附件裡,大家可以玩看看,歡迎修改,
eventlog的備份也許有些人覺得沒什麼重要,但以筆者我,在管理大量主機時,尤其我又是管理線上遊戲服務器,對於系統異常狀況的掌控就是非常重要的了~

小田仔 2006/10/20
附件 1: Dump_Eventlog.rar (2006-10-21 05:52, 40.64 K, 下载附件所需积分 1点 ,下载次数: 75)

作者: electronixtar     时间: 2006-10-21 07:02
下载了还是要顶一下的。WMI强人啊
作者: lxmxn     时间: 2006-10-21 07:09

  下载了,谢了。。

  不过文章最好别写繁体的,看起来眼睛受不了, =_=

作者: boiu     时间: 2006-10-21 07:18
帮你转换下简体,要不看着太费眼了
--------------------------------------------------------
WINDOWS Eventlog每日备份Scripts脚本

前言:
在管理windows平台的服务器时,常常在系统发生问题或是服务器上运行的服务发生异常时,我们第一个一定是先打开"事件检查器"来查看Eventlog,查看是不是有异常的讯息产生,但是windows的log产生默认下是不会以日期来自动备份的,往往要找一个问题都要在一堆log里翻呀找呀,好不方便,如果能够每天在午夜12点59分整以全文字档备份每天的eventlog,那我们就可以在问题发生时,把我们要查找的eventlog以照日期调阅出来,方便又快速~以下小弟我就写了一个很小但又方便的dos scripts提供给大家参考罗!

一.实作:
首先scripts的组成有以下三个档案
1.Dump_eventlog.cmd  -->这支Scripts是把eventlog Dump出来共以全文字档 txt来存档

2.dumpel.exe -->这是一支工具程式,因为如果用windows内建的汇出eventlog功能,汇出来的後缀档名是.evt,以文字编程工具打开来会是乱码,一定要用windows的事件检查器打来看才行,那就太烦人了,所以我们用这支程式加上上一支scripts就可以汇出後缀档名为.txt的log档,要查看就方便多了!

3.del_eventlog.vbs -->这支是用wsh编程编写的scripts,功用是清空系统的eventlog记录,有人要问了,我们不是要备份log吗为什麽需要这支来删除呀!
还记得刚才说的吗?我们是要备份每天的系统Log档,所以用排程排定在每天的午夜12:59备份系统Log後,就利用这支scripts清空系统里旧的log,那样我们每天备份的eventlog就会是完完整整的一整天,而不是好几天混杂在一起的log备份!

二.代码说明
接下来我就要解说代源的写法罗

1.Dump_eventlog.cmd  

---------------------------------- 源代码 ------------------------------------------------------------
@echo Off
mkdir %DATE:~0,4%-%DATE:~5,2%-%DATE:~8,2%
@echo ******* start Backup Eventlog ******
dumpel -s 127.0.0.1 -l system -f %DATE:~0,4%-%DATE:~5,2%-%DATE:~8,2%/system.log
dumpel -s 127.0.0.1 -l application -f %DATE:~0,4%-%DATE:~5,2%-%DATE:~8,2%/application.log
dumpel -s 127.0.0.1 -l security -f %DATE:~0,4%-%DATE:~5,2%-%DATE:~8,2%/security.log
@echo ******* Finish Backup Eventlog ******
star /min del_eventlog.vbs
---------------------------------------------------------------------------------------------------------
说明:
代码不含上下二条虚线喔!第二行是我们要建立一个以日期为名称的资料夹
因为windows的date抓取的日期变数会是2005/02/23 星期三"这样的文字,其内的斜线(/)或减号(-)都是用做命令列的选项符号,这样的组合可能会造成错误。
在此最简单的方法便是用环境变数的扩充功能了,用%DATE:~0,4%-%DATE:~5,2%-%DATE:~8,2%,我们就可以抓取以2006-10-20这种格式的日期,4~6行则是利用dumpel 这支程式把 security 、application 、system 三项log记录汇出来以txt档备份到以当天日期命名的资料夹里,ip我是用本机,请依照自己的需要改成你自己主机的ip,star /min del_eventlog.vbs这行则是在备份完之後清空系统的log记录,原因,前面我们己经说过了!把上面的源码copy并存成.bat或.cmd的档名就可以了!


2.del_eventlog.vbs
-------------------------------------源代码-----------------------------------------------------------
'删除Evenlog
strComputer= "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate,(Backup)}!\\" & _
strComputer & "\root\cimv2")
dim mylogs(3)
mylogs(1)="application"
mylogs(2)="system"
mylogs(3)="security"
for Each logs in mylogs
Set colLogFiles=objWMIService.ExecQuery _
("Select * from Win32_NTEventLogFile where LogFileName='"&logs&"'")
For Each objLogfile in colLogFiles
objLogFile.ClearEventLog()
Next
Next
---------------------------------------------------------------------------------------------------------
说明:
代码不包含上下二条虚线喔!这支是清空系统eventlog的wsh编程 scripts,这里就不多做介绍了,有兴趣可以到微软的脚本范例网站看看,上面有对wsh的做很多的介绍也有范例档可下来研究!
http://www.microsoft.com/china/t ... center/default.mspx

以上三支scripts我有提供我写好的码代码在附件里,大家可以玩看看,欢迎修改,
eventlog的备份也许有些人觉得没什麽重要,但以笔者我,在管理大量主机时,尤其我又是管理线上游戏服务器,对於系统异常状况的掌控就是非常重要的了~

小田仔 2006/10/20
------------------------------------------------

[ Last edited by boiu on 2006-10-21 at 07:19 ]
作者: lxmxn     时间: 2006-10-21 07:26

  呵呵,多谢楼主这么人性化的“服务”...... ^_^

作者: 3742668     时间: 2006-10-21 07:30
原创或转贴,标题请注明.
关于用bat备份日志记录,本版有过讨论,参考链接:
关于wsh 脚本读取Log Event一问题.
额外地使用exe不是那么必要。
作者: ymtien     时间: 2006-10-21 08:24    标题: 使用wsh匯出eventlog的差別

其实用一支wsh 脚本就可以把eventlog备份出来了,我会又配合使用
Windows Server Resource Kit 中 dumpel.exe这个工具是因为用wsh
脚本汇出的log记录是 .evt的档案,而不是全文字档,还必须要用事件检
查器才能打开,用文字编辑器打来会是乱码,为了方便查看,所以我用
dumpel.exe这个工具,来把log汇出成txt档,你提到的那支wsh,微软的网站
就有供提了!!谢谢
作者: vkill     时间: 2006-10-21 22:49
wmi 高人
作者: cslsy     时间: 2007-8-22 19:27    标题: 哈哈


作者: gosien     时间: 2007-8-22 19:31    标题: 求助!帮忙写个批处理!

哪位大虾帮帮忙,帮我写个批处理:
自动打开迅雷,自动下载一个任务,计算出下载的速度和时间.
用批处理怎么写啊?
急急55555555555555
作者: nngx     时间: 2007-11-1 14:30
太好了。正需要这个东东。
作者: lazzycat     时间: 2008-2-22 22:38
高人
太好了。正需要这个东东
作者: dripearth     时间: 2008-5-21 12:16
支持下
作者: bumboy     时间: 2008-11-3 18:39
正好用到!謝謝啦!
作者: amtf15     时间: 2008-12-1 17:18
能不能只是备份一天的log,不要删除服务器上的旧日志啊!
还有:我如果有很多服务器要采集到本地,这个脚本里面能不能填写别的服务器上的ip地址呢?(在有权限的情况下)