WMI学习笔记(三)-AD环境下集成服务器监控报警功能脚本

3 篇文章 0 订阅

版权声明:可以任意转载,转载时请务必以超链接形式标明文章和作者信息。

如何编写WMI脚本,参看《WMI学习笔记(二)-学习WMI的资源》。

简单的脚本例子,参见:《WMI学习笔记(一)-编写脚本来监控Windows服务器的性能

'******************************************************************************
' 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
'******************************************************************************

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值