天天看點

定時檢查伺服器情況腳本

寫了個腳本,每天上班前運作,将檢查結果報告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>"