| 四、如何使用
根据上述思路,AutoReport.bat的完整代码如下:
@ECHO OFF
CLS
SETLOCAL
:: 调试模式:以“AutoReport.bat debug”形式运行命令进入调试模式
:: 调试模式输出详细的屏幕信息
(SET comment=REM )
IF /I '%1'=='debug' @ECHO ON & (SET comment=)
& GOTO :Launch
SET arg=%1
IF DEFINED arg (ECHO 执行 %0 debug 可看到详细的命令输出。)
IF DEFINED arg (ECHO 执行 %0 不带参数隐藏命令输出。) &
(Pause) & (GOTO :EOF)
:Launch
GOTO :BEGIN
:: **************************************************
:: 要用到的工具:
::
:: 名称:delprof.exe和srvinfo.exe
:: 来自:Windows 2000或NT Resource Kit
::
:: 名称:df.exe
:: 来自:http://www.tsc.com/~chrisd/public/df.zip
::
:: 名称:Blat
:: 来自:Http://www.interlog.com/~tcharron/blat.htm
:: **************************************************
:BEGIN
:: 放置工具软件的位置
SET SharedDir=\\ServerDir\tools
:: 用来发送邮件的SMTP服务器
SET MailServer=smtp.MyServer.com
:: 邮件的发件人
SET Sender=myName@MyServer.com
:: 邮件的收件人清单,用逗号分隔多个地址
SET Recipients=FirstMan@MyServer.com,SecondMan@MyServer.com
:: 删除以前可能留存的Blat.txt文件(如因为脚本被中止运行)
IF EXIST %systemdrive%\Blat.txt del %systemdrive%\Blat.txt
IF EXIST %systemdrive%\Blat2.txt del %systemdrive%\Blat2.txt
:: 删除过期的用户配置文件
:: 该命令已被注释掉。请在启用它之前仔细阅读Delprof的说明。
:: 如必要,调整允许保留的天数(/d:选项)
:: echo yes|%SharedDir%\DELPROF.EXE /Q /D:120
:: 清除PST和TMP文件
:: 该命令已被注释掉。
:: 在启用它之前请确认不会出现负面影响
rem for /F "tokens=1" %%i in ('%SharedDir%\Df.exe
^| find ":"') do (del /Q /S %%i*.pst)
& (del /Q /S %%i*.tmp)
:: 检查本月是否已经发送过报告状态的email
FOR /F "tokens=2 delims=/ " %%i
in ('Date /T') DO (SET curmonth=%%i)
FOR /F %%i in (%0:%COMPUTERNAME%-maildate.txt)
DO (SET olddate=%%i)
IF "%curmonth%"=="%olddate%"
ECHO 本月已经发送过邮件... & GOTO :skipmail
:: 检查病毒定义文件
ECHO ******* %COMPUTERNAME% 的病毒定义文件*******>>%systemdrive%\Blat.txt
ECHO.>>%systemdrive%\Blat.txt
SET FileDate=
IF EXIST "C:\Program Files\Common Files\Network
Associates\VirusScan Engine\4.0.xx\CLEAN.DAT"
FOR /F "tokens=1" %%i in ('dir "C:\Program
Files\Common Files\Network Associates\VirusScan
Engine\4.0.xx\CLEAN.DAT" 2^>NUL ^|
find "/"')
DO (SET FileDate=%%i) & GOTO :Next1
IF EXIST "D:\Program Files\Common Files\Network
Associates\VirusScan Engine\4.0.xx\CLEAN.DAT"
FOR /F "tokens=1" %%i in ('dir
"D:\Program Files\Common Files\Network
Associates\VirusScan
Engine\4.0.xx\CLEAN.DAT" 2^>NUL ^|
find "/"') DO (SET FileDate=%%i) &
GOTO :Next1
IF EXIST "D:\Network Associates\VirusScan
Engine\4.0.xx\CLEAN.DAT" FOR /F "tokens=1"
%%i in ('dir "D:\Network Associates\VirusScan
Engine\4.0.xx\CLEAN.DAT" 2^>NUL ^| find
"/"')
DO (SET FileDate=%%i) & GOTO :Next1
:Next1
IF DEFINED FileDate ECHO 病毒定义日期是 %FileDate%>>%systemdrive%\Blat.txt
& GOTO :next2
ECHO 警告!不能找到病毒定义文件并确定其最后更新日期。>>%systemdrive%\Blat.txt
:next2
:: 磁盘空间使用情况
ECHO.>>%systemdrive%\Blat.txt
ECHO ******* %COMPUTERNAME% 的磁盘使用情况 *******>>%systemdrive%\Blat.txt
ECHO.>>%systemdrive%\Blat.txt
FOR /F "tokens=* skip=3" %%i in
('%SharedDir%\Df.exe') DO (ECHO %%i>>%systemdrive%\Blat.txt)
:: 服务器情况
%SharedDir%\srvinfo.exe -s >>%systemdrive%\Blat2.txt
:: 检查某些服务的运行情况
ECHO.>>%systemdrive%\Blat.txt
ECHO ******* %COMPUTERNAME% 上服务的运行情况*******>>%systemdrive%\Blat.txt
ECHO.>>%systemdrive%\Blat.txt
:: 检查messenger服务是否在运行
SET messengerresult=
FOR /F "tokens=*" %%i in ('find
/I "[Running] Messenger" %systemdrive%\Blat2.txt^|
find /V "--"') DO (SET messengerresult=%%i)
ECHO %messengerresult%
IF DEFINED messengerresult ECHO 警告! %COMPUTERNAME%
上Messenger服务正在运行。>>%systemdrive%\Blat.txt
& (ECHO.>>%systemdrive%\Blat.txt)
& (GOTO :mailit)
ECHO 好消息! %COMPUTERNAME% 上Messenger 服务没有运行。>>%systemdrive%\Blat.txt
&(ECHO.>>%systemdrive%\Blat.txt)
:: 通过email发送状态报告
:mailit
ECHO ******* 网络和服务的详细信息 *******>>%systemdrive%\Blat.txt
ECHO.>>%systemdrive%\Blat.txt
type %systemdrive%\Blat2.txt >>%systemdrive%\Blat.txt
:: 发送邮件
%SharedDir%\blat %systemdrive%\Blat.txt -s
"来自 %computername% 的状态报告" -server
%MailServer% -f %Sender% -t %Recipients%
:: 清除临时文件
IF EXIST %systemdrive%\Blat.txt del %systemdrive%\Blat.txt
IF EXIST %systemdrive%\Blat2.txt del %systemdrive%\Blat2.txt
:: 记录当前的月份值
ECHO %curmonth%>%0:%COMPUTERNAME%-maildate.txt
:skipmail
ECHO 运行结束。
%comment%pause
ENDLOCAL
如果你也想要运行这个脚本,必须注意以下几点:
1、把脚本放入一个NTFS卷,并让它有写的权限。必须放入NTFS卷是因为AutoReport.bat要用到隐藏流,必须具有写权限是因为脚本需要向隐藏流写入数据。
2、把Delprof、srvinfo、DF和Blat工具放入某一中心服务器的同一文件夹下,指定对该文件夹的只读权限。
3、在脚本中指定这些工具所在的位置,即把脚本中的“\\ServerDir\tools”替换为这些工具所在的实际位置。
4、指定SMTP邮件服务器,即替换smtp.MyServer.com。对于需要身份验证的邮件发送服务器,在blat命令中用-u和-pw选项指定用户名称和密码。Blat的Readme文档给出了所有选项的详细说明。
5、指定发件人的邮件地址,即替换myName@MyServer.com。
指定收件人清单,即替换FirstMan@MyServer.com0和SecondMan@MyServer.com。多个邮件地址之间用逗号分隔。
6、把脚本加入执行计划,每周运行一次。执行者应该有对工具文件夹的读权限和对脚本的写权限。
本文代码已经在Win 2K Pro和Server环境下经过测试。如果你要把它用在自己的环境中,注意进行全面的测试。 |