AD环境下集服务器监控报警功能的WMI脚本

类别:软件工程 点击:0 评论:0 推荐:

如何编写WMI脚本,参看《WMI学习笔记》。

'******************************************************************************
' Script Name: Enum.vbs
'
' V1.0
' Get CPU,Memory,Disk information from remote server.
' Read server name from AD.
' Write performance data to console or a .csv file
'
' By Fog 2004-08-12
'******************************************************************************

Option Explicit
'On Error Resume Next

'******************************************************************************
' Const value
Const ERR_OK              = 0
Const ERR_GENERAL_FAILURE = 1

' Help
Const L_Empty_Text     = ""

' Disk info
Const HARD_DISK = 3

' Append file
Const ForAppending = 8

' Server OU
Const WEBSRV   = "Computers of Web Service"
Const BAKSRV   = "Computers of Backup Service"
Const DBWEBSRV = "Computers of Database Mix Web Service"
Const DBSRV    = "Computers of Database Service"
Const MANSRV   = "Computers of Manage Service"
Const SUSSRV   = "Computers of SUS Service"

' Write codes
Const WRITE_CON = 0
Const WRITE_CSV = 1
Const WRITE_SQL = 2

'******************************************************************************
' Main block
'******************************************************************************
Dim intWriteOper, strSrvType, strExportInfo, arrDomainName

intWriteOper  = WRITE_CSV
strDomainName = "wins.xinnet.com"
strExportInfo = "SrvType,SrvName,CPU1,CPU2,CPU3,CPU4,Memory(M),TotalMemory(M),Disk1(M),Disk2(M),Disk3(M),Disk4(M),Disk5(M),CheckTime" & vbcrlf

Call ExportInfo(strExportInfo)

strSrvType    = WEBSRV
Call Enum()
strSrvType    = BAKSRV
Call Enum()
strSrvType    = DBWEBSRV
Call Enum()
strSrvType    = DBSRV
Call Enum()
strSrvType    = MANSRV
Call Enum()
strSrvType    = SUSSRV
Call Enum()

'******************************************************************************
' End Of Main Block
'******************************************************************************

'******************************************************************************
' Enum server performance information
'******************************************************************************
Sub Enum()
Dim i, j, intCounter, strComputer, strDomainName, strObjName
Dim objConfiguration, objContainer, objWMIService, colItems, objItem

j = 0

' Get server name list from AD
strObjName ="LDAP://ou=" & strSrvType
arrDomainName = Split(strDomainName, ".")
For i = 0 To UBound(arrDomainName)
    strObjName = strObjName & ",dc=" & arrDomainName(i)
Next
WScript.Echo strObjName
Set objConfiguration = GetObject (strObjName)

For Each objContainer in objConfiguration

    strComputer = objContainer.Name
    strComputer = Right(strComputer, Len(strComputer) - 3)
    strExportInfo = Replace(strSrvType, "Computers of ", "") & ", " & strComputer

    ' Connect to server
    Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")

    ' Memory/CPU/DiskFree
    intCounter = 0
    Set colItems = objWMIService.ExecQuery("Select * from Win32_Processor",,48)
    For Each objItem in colItems
        strExportInfo = strExportInfo & ", " & objItem.LoadPercentage
  If objItem.LoadPercentage >= 85 Then
   Call Cdonts("[Alert]Server-" & strComputer & "'s CPU load is too high", "Server " & strComputer & " CPU(" & intCounter & ") load: " & objItem.LoadPercentage)
  End If
     intCounter = intCounter + 1
    Next
    For i = intCounter To 3
        strExportInfo = strExportInfo & ", "
    Next
   
    Set colItems = objWMIService.ExecQuery("Select * from Win32_PerfRawData_PerfOS_Memory",,48)
    For Each objItem in colItems
        strExportInfo = strExportInfo & ", " & objItem.AvailableMBytes
    Next
    Set colItems = objWMIService.InstancesOf("Win32_LogicalMemoryConfiguration")
    For Each objItem In colItems
  i = CLng(objItem.TotalPhysicalMemory / 1024)
        strExportInfo = strExportInfo & ", " & i
  If i <= 85 Then
   Call Cdonts("[Alert]Server-" & strComputer & "'s memory is too low", "Server " & strComputer & " available memory: " & i & "M.")
  End If
    Next

    Set colItems = objWMIService.ExecQuery ("Select * from Win32_LogicalDisk Where DriveType = " & HARD_DISK & "")
    intCounter = 0
    For Each objItem in colItems
  i = CLng(objItem.FreeSpace / 1048576)
        strExportInfo = strExportInfo & ", " & i
  If i <= 1000 Then
   Call Cdonts("[Alert]Server-" & strComputer & "'s Available Disk Space is too low", "Server " & strComputer & " Disk(" & intCounter & ") free space: " & i & "M.")
  End If
        intCounter = intCounter + 1
    Next
    For i = intCounter To 4
        strExportInfo = strExportInfo & ", "
    Next
    strExportInfo = strExportInfo & ", '" & Now() & "'"  & vbcrlf

    Call ExportInfo(strExportInfo)
    j = j + 1

Next
Wscript.Echo "Total " strSrvType & ": " & j
End Sub
'******************************************************************************
' End
'******************************************************************************

'******************************************************************************
' Export information
'******************************************************************************
Sub ExportInfo(strInfo)
Dim objFSO, objLogFile
    Select Case intWriteOper
    Case WRITE_CON
        WScript.Echo strInfo
    Case WRITE_CSV
        Set objFSO = CreateObject("Scripting.FileSystemObject")
        Set objLogFile = objFSO.OpenTextFile ("performance.csv", ForAppending, True)
        objLogFile.Write strInfo
        objLogFile.Close
    Case WRITE_SQL
    End Select
End Sub
'******************************************************************************
' End
'******************************************************************************

'******************************************************************************
' Send mail use CDONTS component
'******************************************************************************
Sub Cdonts(Topic,Mailbody)
 'On Error Resume Next
 Dim ObjCDOMail
 Set ObjCDOMail = CreateObject("CDONTS.NewMail")
 ObjCDOMail.From = ""
 ObjCDOMail.To = ""
 ObjCDOMail.Subject = Topic
 ObjCDOMail.BodyFormat = 0
 ObjCDOMail.MailFormat = 0
 ObjCDOMail.Body = Mailbody
 'ObjCDOMail.Send
 Set ObjCDOMail = Nothing
End Sub
'******************************************************************************
' End
'******************************************************************************

本文地址:http://com.8s8s.com/it/it36165.htm