熱點推薦:
您现在的位置: 電腦知識網 >> 操作系統 >> Windows系統管理 >> 正文

自動維護和監視公用計算機

2013-11-11 21:37:33  來源: Windows系統管理 

  我們單位裡會議室裡的Windows PC是最忙的PC這些PC連接著投影設備經常要運行PowerPoint之類的系統為了避免網絡對幻燈放映效果的影響用戶的典型做法是首先登錄會議室的PC然後從自己的機器上把PowerPoint演示文稿復制到本地
  
    由於會議室的PC很難做到定期維護往往要到無法正常使用時才會引起注意例如有人想把一個演示文稿復制到會議室PC卻發現磁盤已經滿了有人從會議室PC復制了一個文件卻發現這個文件帶有病毒有時會意外地發現另一個擁有管理權限的用戶把C盤的全部訪問權授予了Guests組為了解決諸如此類的問題我們讓系統自動執行清理文件的任務並定期報告自己的狀態
  
    清理操作每周執行一次防止磁盤空間耗盡根據會議室PC的應用情況清理任務包括
  
  刪除過期的用戶配置文件大多數用戶經常忘記清理自己復制到會議室PC的演示文稿這些PC上過時的用戶配置文件中充塞著大量被廢棄的文檔只要刪除用戶配置文件被廢棄的演示文稿也就一起被刪除從實際情況判斷凡是天以上沒有人使用的配置文件執行清理任務的腳本都可以安全地刪除它們
  
  刪除email文件一些用戶通過會議室PC收發郵件並把郵件留在了本地磁盤上(Outlook的pst文件)按照單位規定會議室PC不允許收發email所以必須刪除所有pst文件
  
  刪除臨時文件某些應用軟件會留下龐大的tmp文件刪除這類文件不影響正常使用
  
    每月報告一次PC的狀態雖然每周執行清理任務意外問題仍有可能出現為了保證PC盡可能正常地運行必須讓PC自動生成狀態報告並通過email發送給指定的收件人報告內容包括
  
  可用的磁盤空間由於用戶經常把龐大的多媒體文件復制到會議室PC雖然每周執行自動清理過期用戶配置文件和臨時文件的操作但磁盤空間仍是一個必須密切關注的問題
  
  病毒定義文件的更新日期由於某些原因如網絡故障殺毒軟件McAfee VirusScan未能及時更新病毒定義信息部分機器的病毒定義信息過期使這些機器面臨被新型病毒感染的風險由於每一台PC的配置更新情況不一致所以不能采用簡單的重新安裝軟件的辦法只能讓腳本自動報告最後更新日期
  
  Messenger服務的狀態在會議室PC上為了防止Net Send網絡消息在放映幻燈時突然跳出來所以禁用了Windows的Messenger服務某些用戶可能在無意之中打開了Messenger服務腳本必須報告該服務的狀態
  
    我們用AutoReportbat批命令腳本完成上述任務雖然這個腳本是為了維護會議室PC編寫的但只要稍加改變不難應用到其他場合
  
  一刪除過期的用戶配置文件
  
    為了刪除不再使用的用戶配置文件AutoReportbat用到了Delprof工具這個工具在Microsoft Windows Server Resource Kit和Microsoft Windows NT Server Resource Kit都有但不同操作系統的工具不能混用如果用了版本錯誤的Delprof會出現錯誤信息Entry point not found刪除過期用戶配置文件的命令為
  
  delprofexe /q /d:
  
    /q選項表示Delprof以安靜模式運行即在刪除用戶配置文件之前不必進行確認/d:選項指定了允許用戶配置持續保持不激活狀態的最長天數也就是說這裡要求Delprof刪除所有不激活時間超過天的用戶配置文件
  
  二刪除pst和tmp文件
  
    為了刪除所有pst和tmp文件腳本運用了一個For命令For命令中的df是一個查找驅動器的免費工具可以從~chrisd/public/dfzip下載df的輸出內容很多不僅僅是一個驅動器的清單所以要把輸出重定向到Find命令Find命令查找輸出內容中包含冒號(:)的字符串——即表示驅動器的字符串對於每一個找到的驅動器Del命令刪除所有以pst和tmp擴展名結尾的文件/s選項要求Del命令搜索當前目錄及其所有子目錄/q選項要求Del命令以安靜模式運行
  三創建狀態報告
  
    AutoReportbat利用多個NTFS文件流來跟蹤什麼時候發送狀態報告email文件流以%ComputerName%maildatetxt的形式命名其中%ComputerName%是一個系統定義的環境變量它的值是用戶當前登錄的機器的名稱這樣每一台PC都有一個對應的隱藏流隱藏流包含了最後為該台機器發送狀態報告的日期腳本運行時讀取這個信息如果本月已經發送過狀態報告則不再發送如果本月尚未發送狀態報告則獲取必要的數據寫入並發送報告再把當前的日期寫入與該台機器對應的隱藏流
  
    獲取數據在獲取狀態數據的過程中AutoReportbat腳本用到了多種工具和技術主要包括
  
  空閒的磁盤空間腳本通過df工具獲得這方面的信息df的輸出中包含了每一個驅動器的總容量和空閒空間百分比
  
  病毒定義文件的日期腳本獲取C:\program files\ common files\network associates\virusscan engine\xx\cleandat文件的最後修改日由於各台會議室PC上該文件的位置不同腳本通過幾個If Exist命令確定該文件的正確位置
  
  Messenger服務的狀態腳本用到了Windows K Resource Kit提供的Srvinfo工具執行Srvinfo時指定s選項可獲得在各台PC上運行的服務清單如果Messenger服務正在運行腳本在狀態報告中寫入警告信息
  
  
    寫入並發送狀態報告腳本把收集到的數據寫入blattxt文件作為郵件的正文然後填寫郵件的收件人發件人主題最後發送消息郵件發送任務由Blat工具完成Blat是一個能夠在Windows命令行發送郵件的工具可以從免費下載它的README文件提供了完善的安裝語法說明和應用實例
  
    在blat命令中%SystemDrive%\blattxt指定了包含郵件內容的文件其中%SystemDrive%是系統定義的環境變量(表示系統盤位置)s選項指定了郵件的主題server選項指定了發送郵件時使用的SMTP服務器f選項指定了發送者的郵件地址t選項指定了收件人的郵件地址為了使腳本代碼更容易維護和閱讀這裡沒有直接在命令行指定SMTP郵件服務器發件人地址收件人地址而是使用了用戶定義的環境變量分別是%MailServer%%Sender%和%Recipients%
  
    記錄當前日期把狀態報告發送給指定的收件人之後接下來要做的是把當前日期寫入隱藏流下次腳本運行時就可以通過檢查這個日期確定是否發送狀態報告
  四如何使用
  
  
    根據上述思路AutoReportbat的完整代碼如下
  
  
  
  @ECHO OFF
  CLS
  SETLOCAL
  
  :: 調試模式AutoReportbat debug形式運行命令進入調試模式
  :: 調試模式輸出詳細的屏幕信息
  (SET comment=REM )
  IF /I %==debug @ECHO ON & (SET comment=) & GOTO :Launch
  SET arg=%
  IF DEFINED arg (ECHO 執行 % debug 可看到詳細的命令輸出)
  IF DEFINED arg (ECHO 執行 % 不帶參數隱藏命令輸出) & (Pause) & (GOTO :EOF)
  :Launch
  
  GOTO :BEGIN
  :: **************************************************
  :: 要用到的工具
  ::
  :: 名稱delprofexe和srvinfoexe
  :: 來自Windows 或NT Resource Kit
  ::
  :: 名稱dfexe
  :: 來自~chrisd/public/dfzip
  ::
  :: 名稱Blat
  :: 來自Http:///~tcharron/l
  :: **************************************************
  :BEGIN
  
  :: 放置工具軟件的位置
  SET SharedDir=\\ServerDir\tools
  :: 用來發送郵件的SMTP服務器
  SET MailServer=
  :: 郵件的發件人
  SET Sender=
  :: 郵件的收件人清單用逗號分隔多個地址
  SET Recipients=FSe
  
  :: 刪除以前可能留存的Blattxt文件(如因為腳本被中止運行)
  IF EXIST %systemdrive%\Blattxt del %systemdrive%\Blattxt
  IF EXIST %systemdrive%\Blattxt del %systemdrive%\Blattxt
  
  :: 刪除過期的用戶配置文件
  :: 該命令已被注釋掉請在啟用它之前仔細閱讀Delprof的說明
  :: 如必要調整允許保留的天數(/d:選項)
  :: echo yes|%SharedDir%\DELPROFEXE /Q /D:
  
  :: 清除PST和TMP文件
  :: 該命令已被注釋掉
  :: 在啟用它之前請確認不會出現負面影響
  rem for /F tokens= %%i in (%SharedDir%\Dfexe ^| find :) do (del /Q /S %%i*pst) & (del /Q /S %%i*tmp)
  
  :: 檢查本月是否已經發送過報告狀態的email
  FOR /F tokens= delims=/ %%i in (Date /T) DO (SET curmonth=%%i)
  
  FOR /F %%i in (%:%COMPUTERNAME%maildatetxt) DO (SET olddate=%%i)
  IF %curmonth%==%olddate% ECHO 本月已經發送過郵件 & GOTO :skipmail
  
  :: 檢查病毒定義文件
  ECHO ******* %COMPUTERNAME% 的病毒定義文件*******>>%systemdrive%\Blattxt
  ECHO>>%systemdrive%\Blattxt
  SET Fi
From:http://tw.wingwit.com/Article/os/xtgl/201311/8839.html
  • 上一篇文章:

  • 下一篇文章:
  • 推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.