寫了個腳本,每天上班前運作,将檢查結果報告E-mail給自己,轉發到短信通知的外網郵箱,上班前就可知道有沒有故障和伺服器的情況了。
檢查的内容不斷完善,現在可知道考勤機、列印機、監控、UPS、路由器、交換機等全部有IP裝置是否連通。檔案共享伺服器、網站等是否可正常通路。Windows伺服器的啟動時間、記憶體使用、硬碟可用空間等情況。
看郵件就對全部裝置和伺服器情況一目了然,不需逐個檢查,在使用者上班前就知道情況先。
檢查是否連通用Ping傳回結果,檔案通路用FileExists,網站類檢查InetRead傳回結果,Windows伺服器類用WMI查詢。
;查詢Windows系統伺服器
Local $QueryServerIP = StringSplit($WinServerIPlist, ",")
For $i = 1 To UBound($QueryServerIP) -1
Local $QueryServer = Ping($QueryServerIP[$i], 1000)
If $QueryServer Then ; If a value greater than 0 was returned then display the following message.
Dim $BodyTable, $partSpaceInfo
$objWMIService = ObjGet("winmgmts:\\" & $QueryServerIP[$i] & "\root\cimv2")
$colItems = $objWMIService.ExecQuery("Select * from Win32_OperatingSystem")
For $colItem in $colItems
$osVersion = $colItem.Version
If $colItem.FreePhysicalMemory < $AlarmFreePhysicalMemory Then
$FreePhysicalMemory = '<font size="3" color="#FE642E">' & Round($colItem.FreePhysicalMemory/1048576, 2) & "G</font>"
Else
$FreePhysicalMemory = Round($colItem.FreePhysicalMemory/1048576, 2) & "G"
EndIf
$TotalVisibleMemorySize = Round($colItem.TotalVisibleMemorySize/1048576, 2) & "G"
$LastBootTime = StringTrimRight($colItem.LastBootUpTime, 11)
$LastBootTime = StringRegExpReplace($LastBootTime, '(\d{4})(\d\d)(\d\d)(\d\d)(\d\d)(\d\d)', '$1-$2-$3 $4:$5:$6')
If _DateDiff( 'd', $LastBootTime, _NowCalc()) < 1 Then ;小于1,即啟動時間未超過1天
$LastBootTime = '<font size="3" color="#FE642E">' & $LastBootTime & '</font>'
EndIf
Next
If $osVersion < 5.1 Then ;處理Windows 2000
$colItems = $objWMIService.ExecQuery("Select * from Win32_PerfRawData_PerfOS_System")
For $colItem in $colItems
$intPerfTimeStamp = $colItem.Timestamp_Object
$intPerfTimeFreq = $colItem.Frequency_Object
$intCounter = $colItem.SystemUpTime
$osversion = $colItem.Version
Next
;計算Win2000啟動時間
$iUptimeInSec = ($intPerfTimeStamp - $intCounter)/$intPerfTimeFreq
$bootUpDays = $iUptimeInSec/60/60/24
$seconds = ChangeToSeconds($bootUpDays)
$LastBootTime = _DateAdd( 's', -$seconds, _NowCalc())
If _DateDiff( 'd', $LastBootTime, _NowCalc()) < 1 Then ;小于1,即啟動時間未超過1天
$LastBootTime = '<font size="3" color="#FE642E">' & $LastBootTime & '</font>'
EndIf
EndIf
$colItems = $objWMIService.ExecQuery ("Select * from Win32_LogicalDiskToPartition")
Local $partSpaceInfo = "" ;清空$partSpaceInfo,否則累加
For $objItem In $colItems
$DiskFH = StringLeft(StringRight($objItem.Dependent, 3), 2)
$colDiskItems = $objWMIService.ExecQuery ("Select * from Win32_LogicalDisk Where DeviceID='" & $DiskFH & "'")
For $colDiskItem In $colDiskItems
; $DiskFHSpaceInfo = StringReplace($DiskFH, ":", "盤可用") & CalcKMG($colDiskItem.FreeSpace) & "/總" & CalcKMG($colDiskItem.Size) & @CR
$DiskFHFreeSpace = CalcKMG($colDiskItem.FreeSpace)
If $colDiskItem.FreeSpace < $AlarmFreeSpace Then
$DiskFHFreeSpace = '<font size="3" color="#FE642E">' & CalcKMG($colDiskItem.FreeSpace) & '</font>'
Else
$DiskFHFreeSpace = CalcKMG($colDiskItem.FreeSpace)
EndIf
$DiskFHSpaceInfo = $DiskFH & $DiskFHFreeSpace & "/" & CalcKMG($colDiskItem.Size) & @CR
Next
$partSpaceInfo = $partSpaceInfo & $DiskFHSpaceInfo
Next
$BodyTable = $BodyTable & '<TR><TD>' & ServerName($QueryServerIP[$i]) & '</TD><TD>' & $QueryServerIP[$i] & '</TD><TD>' & $QueryServer & '毫秒</TD><TD>' & $LastBootTime& '</TD><TD>' & $FreePhysicalMemory & "/" & $TotalVisibleMemorySize & '</TD><TD>' & $partSpaceInfo & '</TD></TR>'
Else
$BodyTable = $BodyTable & & '<TR><TD>' & ServerName($QueryServerIP[$i]) & '</TD><TD>' & $QueryServerIP[$i] & '</TD><TD><font size="3" color="red">不通</font></TD><TD>' & $LastBootTime & '</TD><TD>' & $FreePhysicalMemory & "/" & $TotalVisibleMemorySize & '</TD><TD>' & $partSpaceInfo & '</TD></TR>'
$Subject = '有故障 - ' & StringReplace($Subject, '有故障 - ', "")
EndIf
Next
$Body = $Body & $BodyTable & "</Table><BR><BR><BR>"