分享
 
 
 

自动维护和监视公用计算机

王朝other·作者佚名  2006-11-24
窄屏简体版  字體: |||超大  

我们单位里,会议室里的Windows 2000 PC是最忙的PC,这些PC连接着投影设备,经常要运行PowerPoint之类的系统。为了避免网络对幻灯放映效果的影响,用户的典型做法是:首先登录会议室的PC,然后从自己的机器上把PowerPoint演示文稿复制到本地。由于会议室的PC很难做到定期维护,往往要到无法正常使用时才会引起注意,例如:有人想把一个演示文稿复制到会议室PC,却发现磁盘已经满了;有人从会议室PC复制了一个文件,却发现这个文件带有病毒;有时会意外地发现另一个拥有管理权限的用户把C盘的全部访问权授予了Guests组。为了解决诸如此类的问题,我们让系统自动执行清理文件的任务并定期报告自己的状态。清理操作每周执行一次,防止磁盘空间耗尽。根据会议室PC的应用情况,清理任务包括:1、删除过期的用户配置文件。大多数用户经常忘记清理自己复制到会议室PC的演示文稿,这些PC上过时的用户配置文件中充塞着大量被废弃的文档。只要删除用户配置文件,被废弃的演示文稿也就一起被删除。从实际情况判断,凡是120天以上没有人使用的配置文件,执行清理任务的脚本都可以安全地删除它们。2、删除email文件。一些用户通过会议室PC收发邮件,并把邮件留在了本地磁盘上(Outlook的.pst文件)。按照单位规定,会议室PC不允许收发email,所以必须删除所有.pst文件。3、删除临时文件。某些应用软件会留下庞大的.tmp文件。删除这类文件不影响正常使用。每月报告一次PC的状态。虽然每周执行清理任务,意外问题仍有可能出现。为了保证PC尽可能正常地运行,必须让PC自动生成状态报告并通过email发送给指定的收件人。报告内容包括:1、可用的磁盘空间。由于用户经常把庞大的多媒体文件复制到会议室PC,虽然每周执行自动清理过期用户配置文件和临时文件的操作,但磁盘空间仍是一个必须密切关注的问题。2、病毒定义文件的更新日期。由于某些原因,如网络故障,杀毒软件McAfee VirusScan未能及时更新病毒定义信息,部分机器的病毒定义信息过期,使这些机器面临被新型病毒感染的风险。由于每一台PC的配置、更新情况不一致,所以不能采用简单的重新安装软件的办法,只能让脚本自动报告最后更新日期。3、Messenger服务的状态。在会议室PC上,为了防止Net Send网络消息在放映幻灯时突然跳出来,所以禁用了Windows的Messenger服务。某些用户可能在无意之中打开了Messenger服务,脚本必须报告该服务的状态。我们用AutoReport.bat批命令脚本完成上述任务。虽然这个脚本是为了维护会议室PC编写的,但只要稍加改变,不难应用到其他场合。一、删除过期的用户配置文件为了删除不再使用的用户配置文件,AutoReport.bat用到了Delprof工具。这个工具在Microsoft Windows 2000 Server Resource Kit和Microsoft Windows NT Server 4.0 Resource Kit都有,但不同操作系统的工具不能混用。如果用了版本错误的Delprof,会出现错误信息“Entry point not found”。删除过期用户配置文件的命令为:delprof.exe /q /d:120/q选项表示Delprof以“安静”模式运行,即在删除用户配置文件之前不必进行确认。/d:120选项指定了允许用户配置持续保持不激活状态的最长天数,也就是说,这里要求Delprof删除所有不激活时间超过120天的用户配置文件。二、删除.pst和.tmp文件为了删除所有.pst和.tmp文件,脚本运用了一个For命令。For命令中的df是一个查找驱动器的免费工具,可以从http://www.tsc.com/~chrisd/public/df.zip下载。df的输出内容很多,不仅仅是一个驱动器的清单,所以要把输出重定向到Find命令。Find命令查找输出内容中包含冒号(:)的字符串——即表示驱动器的字符串。对于每一个找到的驱动器,Del命令删除所有以.pst和.tmp扩展名结尾的文件。/s选项要求Del命令搜索当前目录及其所有子目录,/q选项要求Del命令以“安静”模式运行。三、创建状态报告AutoReport.bat利用多个NTFS文件流来跟踪什么时候发送状态报告email。文件流以%ComputerName%-maildate.txt的形式命名,其中%ComputerName%是一个系统定义的环境变量,它的值是用户当前登录的机器的名称。这样,每一台PC都有一个对应的隐藏流。隐藏流包含了最后为该台机器发送状态报告的日期,脚本运行时读取这个信息:如果本月已经发送过状态报告,则不再发送;如果本月尚未发送状态报告,则获取必要的数据,写入并发送报告,再把当前的日期写入与该台机器对应的隐藏流。获取数据。在获取状态数据的过程中,AutoReport.bat脚本用到了多种工具和技术,主要包括:1、空闲的磁盘空间。脚本通过df工具获得这方面的信息,df的输出中包含了每一个驱动器的总容量和空闲空间百分比。2、病毒定义文件的日期。脚本获取C:\program files\ common filesnetwork associates\virusscan engine\4.0.xx\clean.dat文件的最后修改日。由于各台会议室PC上该文件的位置不同,脚本通过几个If Exist命令确定该文件的正确位置。3、Messenger服务的状态。脚本用到了Windows 2K Resource Kit提供的Srvinfo工具。执行Srvinfo时指定-s选项可获得在各台PC上运行的服务清单。如果Messenger服务正在运行,脚本在状态报告中写入警告信息。写入并发送状态报告。脚本把收集到的数据写入blat.txt文件作为邮件的正文,然后填写邮件的收件人、发件人、主题,最后发送消息。邮件发送任务由Blat工具完成。Blat是一个能够在Windows命令行发送邮件的工具,可以从http:// www.interlog.com/~tcharron/blat.html免费下载,它的README文件提供了完善的安装、语法说明和应用实例。在blat命令中,%SystemDrive%\blat.txt指定了包含邮件内容的文件,其中%SystemDrive%是系统定义的环境变量(表示系统盘位置),-s选项指定了邮件的主题,-server选项指定了发送邮件时使用的SMTP服务器,-f选项指定了发送者的邮件地址,-t选项指定了收件人的邮件地址。为了使脚本代码更容易维护和阅读,这里没有直接在命令行指定SMTP邮件服务器、发件人地址、收件人地址,而是使用了用户定义的环境变量,分别是%MailServer%、%Sender%和%Recipients%。记录当前日期。把状态报告发送给指定的收件人之后,接下来要做的是把当前日期写入隐藏流。下次脚本运行时,就可以通过检查这个日期确定是否发送状态报告。四、如何使用根据上述思路,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.html

:: **************************************************

: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 FilesNetwork Associates\VirusScan Engine\4.0.xx\CLEAN.DAT"

FOR /F "tokens=1" %%i in ('dir "C:\Program Files\Common FilesNetwork Associates\VirusScan

Engine\4.0.xx\CLEAN.DAT" 2^>NUL ^| find "/"')

DO (SET FileDate=%%i) & GOTO :Next1

IF EXIST "D:\Program Files\Common FilesNetwork Associates\VirusScan Engine\4.0.xx\CLEAN.DAT"

FOR /F "tokens=1" %%i in ('dir "D:\Program Files\Common FilesNetwork 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环境下经过测试。如果你要把它用在自己的环境中,注意进行全面的测试。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有