Dim oArgs
Set oArgs = WScript.Arguments
WScript.Echo oArgs.Count
if oArgs.Count < 1 Then
'Wscript.Quit -1
End If
SetLocale("en-us")
Dim Name
Name = oArgs(0)
EventID = 113
if InStr(1,Name,"RAID",1) > 0 Or InStr(1,Name,"SAS",1) > 0 Then
Call GetDriverStatus()
else
Call CreateEmptyPropertyBag()
End If
Set oBag= oAPI.CreatePropertyBag()
'Call UpdateDriverMissingState(oBag)
Call oAPI.Return(oBag)
End Sub
Sub GetDriverStatus()
Dim oReg, RC_Code
debug = -1
'Set oAPI = SCOMCreateObject("MOM.ScriptAPI")
Set oReg = GetObject("winmgmts://localhost/root/default:StdRegProv")
If (not(oReg is nothing)) Then
RC_Code = oReg.GetStringValue(HKEY_LOCAL_MACHINE, DEBUG_INFO_KEY, DEBUG_LEVEL_NAME, debug)
If ( RC_Code<>0) Then
debug = -1
End If
End If
Call LogDebugString("Entering GetDriverMissingStatus", INFO_LEVEL_DETAIL)
Call LogDebugString("RAID Controller Name:" + Name, INFO_LEVEL_DETAIL)
Set oBag= oAPI.CreatePropertyBag()
Call UpdateDriverMissingState(oBag)
Call oAPI.Return(oBag)
End Sub
Function UpdateDriverMissingState(ByRef oBag)
Call LogDebugString("Entering UpdateDriverMissingState", INFO_LEVEL_FUNCTION)
UpdateDriverMissingState = -1
Dim oObjectItem, oManagementTargetCollection, oSystemDriver,wql, iResult, I
iResult = GetWMIObjectCollection(CIMV2_NAMESPACE, PNPENTITY_CIMV2_CLASS, oManagementTargetCollection)
If (iResult > 0) Then
For Each oObjectItem in oManagementTargetCollection
iResult = UpdateRAIDState(oBag, oObjectItem, ServeRAIDPCIInfoTable)
If (iResult = -1) Then
UpdateDriverMissingState = 1
Exit Function
End If
iResult = UpdateRAIDState(oBag, oObjectItem, MegaRAIDPCIInfoTable)
If (iResult = -1) Then
UpdateDriverMissingState = 1
Exit Function
End If
iResult = UpdateRAIDState(oBag, oObjectItem, IntegratedRAIDPCIInfoTable)
If (iResult = -1) Then
UpdateDriverMissingState = 1
Exit Function
End If
Next
'No error detected, add the healthy value to oBag
Call oBag.AddValue("State", "Healthy")
Call oBag.AddValue("State - All", "All RAID drivers are running")
End If
UpdateDriverMissingState = 1
End Function
'Only add the error state in this function
Function UpdateRAIDState(oBag, oObjectItem, RAIDInfoTable)
Call LogDebugString("Entering UpdateRAIDState", INFO_LEVEL_FUNCTION)
Dim oSystemDriver,wql, iResult, I
For I = 0 To UBound(RAIDInfoTable)
If (InStr(CStr(oObjectItem.DeviceID), RAIDInfoTable(I)(PCI_INFO)) <> 0) Then
wql = "SELECT __Class, AlertingManagedElement, Description, EventID, PerceivedSeverity FROM Win32_SystemDriver WHERE Name = '" + oObjectItem.Service + "'"