万卷书   首页 > 电脑书籍 > Win2000/NT >自动维护和监视公用计算机(下)
 
 四、如何使用

根据上述思路,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环境下经过测试。如果你要把它用在自己的环境中,注意进行全面的测试。