HewlettPackard.Servers.ProLiant.SNMP.ProLiantSNMPHealthStateDataSource (DataSourceModuleType)

Element properties:

TypeDataSourceModuleType
IsolationAny
AccessibilityPublic
RunAsHewlettPackard.Servers.HPProbeAccount
OutputTypeSystem.PropertyBagData

Member Modules:

ID Module Type TypeId RunAs 
DS DataSource System.CommandExecuterPropertyBagSource Default

Overrideable Parameters:

IDParameterTypeSelector
PeriodInSecondsint$Config/PeriodInSeconds$

Source Code:

<DataSourceModuleType ID="HewlettPackard.Servers.ProLiant.SNMP.ProLiantSNMPHealthStateDataSource" Accessibility="Public" RunAs="HPSC!HewlettPackard.Servers.HPProbeAccount">
<Configuration>
<xsd:element name="PeriodInSeconds" type="xsd:int"/>
<xsd:element name="PrincipalName" type="xsd:string"/>
<xsd:element name="TargetName" type="xsd:string"/>
</Configuration>
<OverrideableParameters>
<OverrideableParameter Selector="$Config/PeriodInSeconds$" ParameterType="int" ID="PeriodInSeconds"/>
</OverrideableParameters>
<ModuleImplementation>
<Composite>
<MemberModules>
<DataSource ID="DS" TypeID="System!System.CommandExecuterPropertyBagSource">
<IntervalSeconds>$Config/PeriodInSeconds$</IntervalSeconds>
<ApplicationName>%windir%\system32\cscript.exe</ApplicationName>
<WorkingDirectory/>
<CommandLine>$file/Hewlett-PackardProLiantSNMPHealthMonitor.vbs$ Monitor 0 0 0 $Config/PrincipalName$ $Config/TargetName$</CommandLine>
<TimeoutSeconds>60</TimeoutSeconds>
<RequireOutput>true</RequireOutput>
<Files>
<File>
<Name>Hewlett-PackardProLiantSNMPHealthMonitor.vbs</Name>
<Contents><Script>
'-------------------------------------------------------------------
' &lt;company&gt;Hewlett Packard Enterprise&lt;/company&gt;
' &lt;copyright&gt;Copyright (c) Hewlett Packard Enterprise Company 2007&lt;/copyright&gt;
' &lt;summary&gt;
' Discovery and State Monitoring for HPE ProLiant servers.
' &lt;/summary&gt;
'-------------------------------------------------------------------
Option Explicit
Const STATE_NONE = 0
Const STATE_SUCCESS = 1
Const STATE_WARNING = 2
Const STATE_ERROR = 3
Const HKEY_LOCAL_MACHINE = &amp;H80000002
Const CRemoteManagementNicConfigA = "System\CompaqServer\RemoteInsight\Component\Nic\Config"
Const CRemoteManagementNicConfigB = "NicConfig"
Const CROMRevisionA = "System\CompaqServer\Std_Equip\Component\ROM"
Const CROMRevisionB = "SysRom"
Const CMIBArrayA = "System\CompaqHost\Host\Component"
Const CMIBArrayB = "MibStatusArray"
Const CAgentsVersionA = "System\CompaqHost\Host\Component\SoftwareVersion"
Const CAgentsVersionB = "AgentsVer"
Const CAgentsVersionX86A = "Software\Compaq\CPQInstall"
Const CAgentsVersionX86B = "Version"
Const CBaseHardware = 0
Const CCluster = 1
Const CCPU = 2
Const CCpuRegA = "System\CompaqServer\Std_Equip\Component\Cpu"
Const CCpuRegB = "Cpu"
Const CFans = 3
Const CThermalRegA = "System\CompaqServer\Health\Component\Thermal"
Const CThermalRegB = "Status"
Const CMemory = 4
Const CMemoryBoardRegA = "System\CompaqServer\Health\Component\Memory\MemBoard"
Const CMemoryBoardRegB = "MemBoard"
Const CMemoryModuleRegA = "System\CompaqServer\Health\Component\Memory\MemModule"
Const CMemoryModuleRegB = "MemModule"
Const CMemory2BoardRegA = "System\CompaqServer\Health\Component\AMPMemory\MemBoard"
Const CMemory2BoardRegB = "MemBoard"
Const CMemory2ModuleRegA = "System\CompaqServer\Health\Component\AMPMemory\MemModule"
Const CMemory2ModuleRegB = "MemModule"
Const CNIC = 5
Const CPower = 6
Const CPowerRegA = "System\CompaqServer\Health\Component\Power\Supply"
Const CPowerRegB = "PsInfo"
Const CPowerRegAltA = "System\CompaqServer\Health\Component\Ftps"
Const CPowerRegAltB = "Ftps"
Const CEnclosure = 7
Const CRemoteManagementProcessor = 8
Const CServerStorage = 9
Const CTemperature = 10
Const CUPS = 11
Const COther = 12
Const CRealtimeMonitor = 13
Const CRealtimeMonitorRegA = "System\CompaqServer\Health\Component\Cpr"
Const CRealtimeMonitorRegB = "Cpr"
Const CLogs = 14
Const CLogsRegA = "System\CompaqServer\Health\Component"
Const CLogsRegB = "LastCriticalErr"


Dim Sh, Registry, HPHealthCollectionList, HPHealthCollectionStateList

HPHealthCollectionList = array( _
"Base Hardware (na)", _
"Cluster (na)", _
"Processors", _
"Cooling", _
"Memory", _
"Server Networks", _
"Power Supplies", _
"Enclosure (na)", _
"Management Processors", _
"Server Storage", _
"Temperature Sensors", _
"UPS", _
"Server Others", _
"Realtime Monitors", _
"Logs" _
)

HPHealthCollectionStateList = array( _
"BaseHardware_NA", _
"Cluster_NA", _
"Processors_SNMP", _
"Cooling_SNMP", _
"Memory_SNMP", _
"ServerNetworks_SNMP", _
"PowerSupplies_SNMP", _
"Enclosure_NA", _
"ManagementProcessors_SNMP", _
"ServerStorage_SNMP", _
"TemperatureSensors_SNMP", _
"UPS_SNMP", _
"ServerOthers_SNMP", _
"RealtimeMonitors_SNMP", _
"Logs_SNMP" _
)

Sub Main()
Dim oArgs
Set oArgs = WScript.Arguments
if oArgs.Count &lt; 6 Then
WScript.Quit -1
End If

Dim Mode, SourceType, SourceID, ManagedEntityId, PrincipalName, TargetComputer

Mode = oArgs(0)
SourceType = oArgs(1)
SourceId = oArgs(2)
ManagedEntityId = oArgs(3)
PrincipalName = oArgs(4)
TargetComputer = oArgs(5)

If Not InitializeWithParamerts(TargetComputer) Then Exit Sub

Dim oAPI, oDiscoveryData, oPropertyBag, oInstance
Set oAPI = CreateObject("MOM.ScriptAPI")
If Mode = "Discovery" Then
Set oDiscoveryData = oAPI.CreateDiscoveryData(SourceType, SourceId, ManagedEntityId)
Else
Set oPropertyBag = oAPI.CreatePropertyBag()
End If

' CAgentsVersionX86 (String / SOFTWARE)
Dim AgentsVersion
AgentsVersion = ""
On Error Resume Next
Registry.GetStringValue HKEY_LOCAL_MACHINE, CAgentsVersionX86A, CAgentsVersionX86B, AgentsVersion
If Err.Number &lt;&gt; 0 OR IsNull(AgentsVersion) Then
AgentsVersion = ""
End If
On Error Goto 0

' CAgentsVersion (Binary / SYSTEM)
If AgentsVersion = "" Then
Dim AgentsBinary
On Error Resume Next
Registry.GetBinaryValue HKEY_LOCAL_MACHINE, CAgentsVersionA, CAgentsVersionB, AgentsBinary
If Err.Number = 0 And NOT IsNull(AgentsBinary) Then
For i = 0 to UBound(AgentsBinary)
If AgentsBinary(i) = 0 Then Exit For
AgentsVersion = AgentsVersion &amp; String(1, AgentsBinary(i))
Next
Else
AgentsVersion = ""
End If
On Error Goto 0
End If

Dim index, mibStatusArray, maxIndex
Dim mibstatus, mibPacket, mibHealth
Dim failedComponent

mibStatusArray = array(0, 0, 0, 0)
On Error Resume Next
Registry.GetBinaryValue HKEY_LOCAL_MACHINE, CMIBArrayA, CMIBArrayB, mibStatusArray
If Err.Number &lt;&gt; 0 OR IsNull(mibStatusArray) Then
mibStatusArray = array(0, 0, 0, 0)
End If
On Error Goto 0

maxIndex = (UBound(mibStatusArray) + 1)/4

If maxIndex &gt;= 7 Then
If mibStatusArray(6 * 4) = 1 Then
mibHealth = mibStatusArray((6 * 4) + 1)
Else
mibHealth = 2 ' Green - don't care
End If
End If

If maxIndex &gt;= 2 Then
' Base Hardware MIB=1
If mibStatusArray(1 * 4) = 1 Then
If mibStatusArray((1 * 4) + 1) &gt; mibHealth Then mibHealth = mibStatusArray((1 * 4) + 1)
End If
End If

If maxIndex &gt;= 16 Then
' Cluster MIB=15
If mibStatusArray(15 * 4) = 1 Then
If mibStatusArray((15 * 4) + 1) &gt; mibHealth Then mibHealth = mibStatusArray((15 * 4) + 1)
End If
End If

' CPU CCpuReg
mibStatus = 0
failedComponent = "N/A"
For index = 0 to 1023
mibPacket = 0
On Error Resume Next
Registry.GetBinaryValue HKEY_LOCAL_MACHINE, CCpuRegA, CCpuRegB &amp; ThreeDigit(index), mibPacket
If Err.Number &lt;&gt; 0 OR IsNull(mibPacket) Then Exit For
If AgentsVersion = "7.51.0.0" OR AgentsVersion = "7.50.0.0" OR AgentsVersion = "7.41.0.0" Then
If mibStatus &lt; mibPacket(256 + 24) Then
mibStatus = mibPacket(256 + 24)
If mibStatus &gt; 2 Then failedComponent = "Processor " &amp; index
End If
Else
If mibStatus &lt; mibPacket(256 + 16) Then
mibStatus = mibPacket(256 + 16)
If mibStatus &gt; 2 Then failedComponent = "Processor " &amp; index
End If
End If
On Error Goto 0
Next
If mibStatus &lt;&gt; 0 Then
If Mode = "Discovery" Then
Set oInstance = oDiscoveryData.CreateClassInstance("$MPElement[Name='HewlettPackard.Servers.ProLiant.SNMP.HPProLiantSNMPProcessors']$")
Call oInstance.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.Computer']/PrincipalName$", PrincipalName)
Call oInstance.AddProperty("$MPElement[Name='HPSC!HewlettPackard.Servers.HPServer']/NetworkName$", TargetComputer)
Call oInstance.AddProperty("$MPElement[Name='System!System.Entity']/DisplayName$", HPHealthCollectionList(CCPU))
Call oInstance.AddProperty("$MPElement[Name='HPSC!HewlettPackard.Servers.HPHealthCollection']/ServerName$", TargetComputer)
Call oDiscoveryData.AddInstance(oInstance)
Set oInstance = Nothing
Else
Call oPropertyBag.AddValue(HPHealthCollectionStateList(CCPU) &amp; ".HealthState", GetStateForHPHealthCollection(mibStatus))
If IsInFailedState(mibStatus) Then Call oPropertyBag.AddValue(HPHealthCollectionStateList(CCPU) &amp; ".FailedComponent", failedComponent)
End If
End If

' Fans CThermalReg
mibPacket = 0
On Error Resume Next
Registry.GetBinaryValue HKEY_LOCAL_MACHINE, CThermalRegA, CThermalRegB, mibPacket
If Err.Number &lt;&gt; 0 OR IsNull(mibPacket) Then
mibStatus = 0
failedComponent = "N/A"
Else
mibStatus = mibPacket(3) ' System Fans
If mibStatus &gt; 2 Then failedComponent = "System Fan(s)"
If mibStatus &lt; mibPacket(4) Then
mibStatus = mibPacket(4) ' Cpu Fans
If mibStatus &gt; 2 Then failedComponent = "Cpu Fan(s)"
End If
End If
On Error Goto 0
If mibStatus &lt;&gt; 0 Then
If Mode = "Discovery" Then
Set oInstance = oDiscoveryData.CreateClassInstance("$MPElement[Name='HewlettPackard.Servers.ProLiant.SNMP.HPProLiantSNMPCooling']$")
Call oInstance.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.Computer']/PrincipalName$", PrincipalName)
Call oInstance.AddProperty("$MPElement[Name='HPSC!HewlettPackard.Servers.HPServer']/NetworkName$", TargetComputer)
Call oInstance.AddProperty("$MPElement[Name='System!System.Entity']/DisplayName$", HPHealthCollectionList(CFans))
Call oInstance.AddProperty("$MPElement[Name='HPSC!HewlettPackard.Servers.HPHealthCollection']/ServerName$", TargetComputer)
Call oDiscoveryData.AddInstance(oInstance)
Set oInstance = Nothing
Else
Call oPropertyBag.AddValue(HPHealthCollectionStateList(CFans) &amp; ".HealthState", GetStateForHPHealthCollection(mibStatus))
If IsInFailedState(mibStatus) Then Call oPropertyBag.AddValue(HPHealthCollectionStateList(CFans) &amp; ".FailedComponent", failedComponent)
End If
If mibStatus &gt;= mibHealth Then mibHealth = 2 ' Green - don't care
End If

' AMPMemory CMemory2BoardReg / CMemory2ModuleReg
Dim memCondition
mibStatus = 0
failedComponent = "N/A"
For index = 0 to 1023
mibPacket = 0
On Error Resume Next
Registry.GetBinaryValue HKEY_LOCAL_MACHINE, CMemory2BoardRegA, CMemory2BoardRegB &amp; ThreeDigit(index), mibPacket
If Err.Number &lt;&gt; 0 OR IsNull(mibPacket) Then Exit For
If mibStatus &lt; mibPacket(40) Then
mibStatus = mibPacket(40)
If mibStatus &gt; 2 Then failedComponent = "Memory Board " &amp; index
End If
On Error Goto 0
Next
For index = 0 to 1023
mibPacket = 0
On Error Resume Next
Registry.GetBinaryValue HKEY_LOCAL_MACHINE, CMemory2ModuleRegA, CMemory2ModuleRegB &amp; ThreeDigit(index), mibPacket
If Err.Number &lt;&gt; 0 OR IsNull(mibPacket) Then Exit For
If mibPacket(811) &gt; 2 AND mibPacket(811) &lt; 7 Then
memCondition = 2
ElseIf mibPacket(811) &gt; 6 AND mibPacket(811) &lt; 12 Then
memCondition = 3
Else
memCondition = 0
End If
If mibStatus &lt; memCondition Then
mibStatus = memCondition
If mibStatus &gt; 2 Then failedComponent = "Memory Module " &amp; index
End If
On Error Goto 0
Next

If mibStatus = 0 Then
' Memory CMemoryBoardReg / CMemoryModuleReg
mibStatus = 0
failedComponent = "N/A"
For index = 0 to 1023
mibPacket = 0
On Error Resume Next
Registry.GetBinaryValue HKEY_LOCAL_MACHINE, CMemoryBoardRegA, CMemoryBoardRegB &amp; ThreeDigit(index), mibPacket
If Err.Number &lt;&gt; 0 OR IsNull(mibPacket) Then Exit For
If mibStatus &lt; mibPacket(28) Then
mibStatus = mibPacket(28)
If mibStatus &gt; 2 Then failedComponent = "Memory Board " &amp; index
End If
On Error Goto 0
Next
For index = 0 to 1023
mibPacket = 0
On Error Resume Next
Registry.GetBinaryValue HKEY_LOCAL_MACHINE, CMemoryModuleRegA, CMemoryModuleRegB &amp; ThreeDigit(index), mibPacket
If Err.Number &lt;&gt; 0 OR IsNull(mibPacket) Then Exit For
If mibPacket(8) &gt; 2 AND mibPacket(8) &lt; 7 Then
memCondition = 2
ElseIf mibPacket(8) &gt; 6 AND mibPacket(8) &lt; 12 Then
memCondition = 3
Else
memCondition = 0
End If
If mibStatus &lt; memCondition Then
mibStatus = memCondition
If mibStatus &gt; 2 Then failedComponent = "Memory Module " &amp; index
End If
On Error Goto 0
Next
End If

If mibStatus &lt;&gt; 0 Then
If Mode = "Discovery" Then
Set oInstance = oDiscoveryData.CreateClassInstance("$MPElement[Name='HewlettPackard.Servers.ProLiant.SNMP.HPProLiantSNMPMemory']$")
Call oInstance.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.Computer']/PrincipalName$", PrincipalName)
Call oInstance.AddProperty("$MPElement[Name='HPSC!HewlettPackard.Servers.HPServer']/NetworkName$", TargetComputer)
Call oInstance.AddProperty("$MPElement[Name='System!System.Entity']/DisplayName$", HPHealthCollectionList(CMemory))
Call oInstance.AddProperty("$MPElement[Name='HPSC!HewlettPackard.Servers.HPHealthCollection']/ServerName$", TargetComputer)
Call oDiscoveryData.AddInstance(oInstance)
Set oInstance = Nothing
Else
Call oPropertyBag.AddValue(HPHealthCollectionStateList(CMemory) &amp; ".HealthState", GetStateForHPHealthCollection(mibStatus))
If IsInFailedState(mibStatus) Then Call oPropertyBag.AddValue(HPHealthCollectionStateList(CMemory) &amp; ".FailedComponent", failedComponent)
End If
If mibStatus &gt;= mibHealth Then mibHealth = 2 ' Green - don't care
End If

If maxIndex &gt;= 19 Then
' NIC MIB=18
If mibStatusArray(18 * 4) = 1 Then
failedComponent = "N/A"
If Mode = "Discovery" Then
Set oInstance = oDiscoveryData.CreateClassInstance("$MPElement[Name='HewlettPackard.Servers.ProLiant.SNMP.HPProLiantSNMPServerNetworks']$")
Call oInstance.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.Computer']/PrincipalName$", PrincipalName)
Call oInstance.AddProperty("$MPElement[Name='HPSC!HewlettPackard.Servers.HPServer']/NetworkName$", TargetComputer)
Call oInstance.AddProperty("$MPElement[Name='System!System.Entity']/DisplayName$", HPHealthCollectionList(CNIC))
Call oInstance.AddProperty("$MPElement[Name='HPSC!HewlettPackard.Servers.HPHealthCollection']/ServerName$", TargetComputer)
Call oDiscoveryData.AddInstance(oInstance)
Set oInstance = Nothing
Else
Call oPropertyBag.AddValue(HPHealthCollectionStateList(CNIC) &amp; ".HealthState", GetStateForHPHealthCollection(mibStatusArray((18 * 4) + 1)))
If IsInFailedState(mibStatusArray((18 * 4) + 1)) Then Call oPropertyBag.AddValue(HPHealthCollectionStateList(CNIC) &amp; ".FailedComponent", failedComponent)
End If
End If
End If

' Power CPowerReg
mibStatus = 0
failedComponent = "N/A"
For index = 0 to 31
mibPacket = 0
On Error Resume Next
Registry.GetBinaryValue HKEY_LOCAL_MACHINE, CPowerRegA, CPowerRegB &amp; ThreeDigit(index), mibPacket
If Err.Number &lt;&gt; 0 OR IsNull(mibPacket) Then Exit For
If mibStatus &lt; mibPacket(4) Then
mibStatus = mibPacket(4)
If mibStatus &gt; 2 Then failedComponent = "Power Supply " &amp; index
End If
On Error Goto 0
Next
If mibStatus &lt;&gt; 0 Then
If mibStatus &gt; 2 Then
mibPacket = 0
On Error Resume Next
Registry.GetBinaryValue HKEY_LOCAL_MACHINE, CPowerRegAltA, CPowerRegAltB, mibPacket
If Err.Number = 0 And NOT IsNull(mibPacket) Then
mibStatus = mibPacket(0)
End If
On Error Goto 0
End If
If Mode = "Discovery" Then
Set oInstance = oDiscoveryData.CreateClassInstance("$MPElement[Name='HewlettPackard.Servers.ProLiant.SNMP.HPProLiantSNMPPowerSupplies']$")
Call oInstance.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.Computer']/PrincipalName$", PrincipalName)
Call oInstance.AddProperty("$MPElement[Name='HPSC!HewlettPackard.Servers.HPServer']/NetworkName$", TargetComputer)
Call oInstance.AddProperty("$MPElement[Name='System!System.Entity']/DisplayName$", HPHealthCollectionList(CPower))
Call oInstance.AddProperty("$MPElement[Name='HPSC!HewlettPackard.Servers.HPHealthCollection']/ServerName$", TargetComputer)
Call oDiscoveryData.AddInstance(oInstance)
Set oInstance = Nothing
Else
Call oPropertyBag.AddValue(HPHealthCollectionStateList(CPower) &amp; ".HealthState", GetStateForHPHealthCollection(mibStatus))
If IsInFailedState(mibStatus) Then Call oPropertyBag.AddValue(HPHealthCollectionStateList(CPower) &amp; ".FailedComponent", failedComponent)
End If
If mibStatus &gt;= mibHealth Then mibHealth = 2 ' Green - don't care
End If

' Realtime Monitorr CRealTimeMonitorReg
mibStatus = 0
failedComponent = "N/A"
mibPacket = 0
On Error Resume Next
Dim cprCondition
Registry.GetBinaryValue HKEY_LOCAL_MACHINE, CRealtimeMonitorRegA, CRealtimeMonitorRegB, mibPacket
If Err.Number = 0 AND NOT IsNull(mibPacket) Then
Dim mibS
mibS = 0
If mibPacket(0) = 3 Then
mibS = 3
ElseIf mibPacket(0) = 4 Then
mibS = 2
End If
If mibStatus &lt; mibS Then
mibStatus = mibS
If mibStatus &gt; 2 Then failedComponent = "Auto Server Recovery " &amp; index
End If
'Set the initial state to healthy
cprCondition = 2
'Read the cprCondition if ASR status is enabled
If mibStatus = 2 Then
cprCondition = mibPacket(176)
End If
If Mode = "Discovery" Then
Set oInstance = oDiscoveryData.CreateClassInstance("$MPElement[Name='HewlettPackard.Servers.ProLiant.SNMP.HPProLiantSNMPRealtimeMonitors']$")
Call oInstance.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.Computer']/PrincipalName$", PrincipalName)
Call oInstance.AddProperty("$MPElement[Name='HPSC!HewlettPackard.Servers.HPServer']/NetworkName$", TargetComputer)
Call oInstance.AddProperty("$MPElement[Name='System!System.Entity']/DisplayName$", HPHealthCollectionList(CRealtimeMonitor))
Call oInstance.AddProperty("$MPElement[Name='HPSC!HewlettPackard.Servers.HPHealthCollection']/ServerName$", TargetComputer)
Call oDiscoveryData.AddInstance(oInstance)
Set oInstance = Nothing
Else
Call oPropertyBag.AddValue(HPHealthCollectionStateList(CRealtimeMonitor) &amp; ".HealthState", GetStateForHPHealthCollection(cprCondition))
If IsInFailedState(cprCondition) Then Call oPropertyBag.AddValue(HPHealthCollectionStateList(CRealtimeMonitor) &amp; ".FailedComponent", failedComponent)
End If
If mibStatus &gt;= mibHealth Then mibHealth = 2 ' Green - don't care
End If
On Error Goto 0

If maxIndex &gt;= 10 Then
' Remote Management Processor MIB=9
If mibStatusArray(9 * 4) = 1 Then
failedComponent = "N/A"
If Mode = "Discovery" Then
Set oInstance = oDiscoveryData.CreateClassInstance("$MPElement[Name='HewlettPackard.Servers.ProLiant.SNMP.HPProLiantSNMPManagementProcessors']$")
Call oInstance.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.Computer']/PrincipalName$", PrincipalName)
Call oInstance.AddProperty("$MPElement[Name='HPSC!HewlettPackard.Servers.HPServer']/NetworkName$", TargetComputer)
Call oInstance.AddProperty("$MPElement[Name='System!System.Entity']/DisplayName$", HPHealthCollectionList(CRemoteManagementProcessor))
Call oInstance.AddProperty("$MPElement[Name='HPSC!HewlettPackard.Servers.HPHealthCollection']/ServerName$", TargetComputer)
Call oDiscoveryData.AddInstance(oInstance)
Set oInstance = Nothing
Else
Call oPropertyBag.AddValue(HPHealthCollectionStateList(CRemoteManagementProcessor) &amp; ".HealthState", GetStateForHPHealthCollection(mibStatusArray((9 * 4) + 1)))
If IsInFailedState(mibStatusArray((9 * 4) + 1)) Then Call oPropertyBag.AddValue(HPHealthCollectionStateList(CRemoteManagementProcessor) &amp; ".FailedComponent", failedComponent)
End If
End If
End If

If maxIndex &gt;= 17 Then
' Server Storage MIB=3,5,7,8,14,16
If mibStatusArray(3 * 4) = 1 OR mibStatusArray(5 * 4) = 1 OR mibStatusArray(7 * 4) = 1 OR _
mibStatusArray(8 * 4) = 1 OR mibStatusArray(14 * 4) = 1 OR mibStatusArray(16 * 4) = 1 Then
mibstatus = 0
If mibStatusArray(3 * 4) = 1 AND mibstatus &lt; mibStatusArray((3 * 4) + 1) Then mibstatus = mibStatusArray((3 * 4) + 1)
If mibStatusArray(5 * 4) = 1 AND mibstatus &lt; mibStatusArray((5 * 4) + 1) Then mibstatus = mibStatusArray((5 * 4) + 1)
If mibStatusArray(7 * 4) = 1 AND mibstatus &lt; mibStatusArray((7 * 4) + 1) Then mibstatus = mibStatusArray((7 * 4) + 1)
If mibStatusArray(8 * 4) = 1 AND mibstatus &lt; mibStatusArray((8 * 4) + 1) Then mibstatus = mibStatusArray((8 * 4) + 1)
If mibStatusArray(14 * 4) = 1 AND mibstatus &lt; mibStatusArray((14 * 4) + 1) Then mibstatus = mibStatusArray((14 * 4) + 1)
If mibStatusArray(16 * 4) = 1 AND mibstatus &lt; mibStatusArray((16 * 4) + 1) Then mibstatus = mibStatusArray((16 * 4) + 1)

failedComponent = "N/A"
If Mode = "Discovery" Then
Set oInstance = oDiscoveryData.CreateClassInstance("$MPElement[Name='HewlettPackard.Servers.ProLiant.SNMP.HPProLiantSNMPServerStorage']$")
Call oInstance.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.Computer']/PrincipalName$", PrincipalName)
Call oInstance.AddProperty("$MPElement[Name='HPSC!HewlettPackard.Servers.HPServer']/NetworkName$", TargetComputer)
Call oInstance.AddProperty("$MPElement[Name='System!System.Entity']/DisplayName$", HPHealthCollectionList(CServerStorage))
Call oInstance.AddProperty("$MPElement[Name='HPSC!HewlettPackard.Servers.HPHealthCollection']/ServerName$", TargetComputer)
Call oDiscoveryData.AddInstance(oInstance)
Set oInstance = Nothing
Else
Call oPropertyBag.AddValue(HPHealthCollectionStateList(CServerStorage) &amp; ".HealthState", GetStateForHPHealthCollection(mibstatus))
If IsInFailedState(mibStatus) Then Call oPropertyBag.AddValue(HPHealthCollectionStateList(CServerStorage) &amp; ".FailedComponent", failedComponent)
End If
End If

End If

' Temperature CThermalReg
mibPacket = 0
On Error Resume Next
Registry.GetBinaryValue HKEY_LOCAL_MACHINE, CThermalRegA, CThermalRegB, mibPacket
If Err.Number &lt;&gt; 0 OR IsNull(mibPacket) Then
mibStatus = 0
Else
mibStatus = mibPacket(2)
End If
On Error Goto 0
If mibStatus &lt;&gt; 0 Then
failedComponent = "N/A"
If Mode = "Discovery" Then
Set oInstance = oDiscoveryData.CreateClassInstance("$MPElement[Name='HewlettPackard.Servers.ProLiant.SNMP.HPProLiantSNMPTemperatureSensors']$")
Call oInstance.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.Computer']/PrincipalName$", PrincipalName)
Call oInstance.AddProperty("$MPElement[Name='HPSC!HewlettPackard.Servers.HPServer']/NetworkName$", TargetComputer)
Call oInstance.AddProperty("$MPElement[Name='System!System.Entity']/DisplayName$", HPHealthCollectionList(CTemperature))
Call oInstance.AddProperty("$MPElement[Name='HPSC!HewlettPackard.Servers.HPHealthCollection']/ServerName$", TargetComputer)
Call oDiscoveryData.AddInstance(oInstance)
Set oInstance = Nothing
Else
Call oPropertyBag.AddValue(HPHealthCollectionStateList(CTemperature) &amp; ".HealthState", GetStateForHPHealthCollection(mibstatus))
If IsInFailedState(mibStatus) Then Call oPropertyBag.AddValue(HPHealthCollectionStateList(CTemperature) &amp; ".FailedComponent", failedComponent)
End If
If mibStatus &gt;= mibHealth Then mibHealth = 2 ' Green - don't care
End If

If maxIndex &gt;= 13 Then
' UPS MIB=12
If mibStatusArray(12 * 4) = 1 Then
failedComponent = "N/A"
If Mode = "Discovery" Then
Set oInstance = oDiscoveryData.CreateClassInstance("$MPElement[Name='HewlettPackard.Servers.ProLiant.SNMP.HPProLiantSNMPUPS']$")
Call oInstance.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.Computer']/PrincipalName$", PrincipalName)
Call oInstance.AddProperty("$MPElement[Name='HPSC!HewlettPackard.Servers.HPServer']/NetworkName$", TargetComputer)
Call oInstance.AddProperty("$MPElement[Name='System!System.Entity']/DisplayName$", HPHealthCollectionList(CUPS))
Call oInstance.AddProperty("$MPElement[Name='HPSC!HewlettPackard.Servers.HPHealthCollection']/ServerName$", TargetComputer)
Call oDiscoveryData.AddInstance(oInstance)
Set oInstance = Nothing
Else
Call oPropertyBag.AddValue(HPHealthCollectionStateList(CUPS) &amp; ".HealthState", GetStateForHPHealthCollection(mibStatusArray((12 * 4) + 1)))
If IsInFailedState(mibStatusArray((12 * 4) + 1)) Then Call oPropertyBag.AddValue(HPHealthCollectionStateList(CUPS) &amp; ".FailedComponent", failedComponent)
End If
End If
End If

' IML Logs CLogs
mibPacket = 0
On Error Resume Next
Registry.GetBinaryValue HKEY_LOCAL_MACHINE, CLogsRegA, CLogsRegB, mibPacket
If Err.Number &lt;&gt; 0 OR IsNull(mibPacket) Then
mibStatus = 0
Else
mibStatus = 0
If mibPacket(284) = 3 Then mibStatus = mibPacket(288)
End If
On Error Goto 0
If mibStatus &lt;&gt; 0 Then
If Mode = "Discovery" Then
Set oInstance = oDiscoveryData.CreateClassInstance("$MPElement[Name='HewlettPackard.Servers.ProLiant.SNMP.HPProLiantSNMPLogs']$")
Call oInstance.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.Computer']/PrincipalName$", PrincipalName)
Call oInstance.AddProperty("$MPElement[Name='HPSC!HewlettPackard.Servers.HPServer']/NetworkName$", TargetComputer)
Call oInstance.AddProperty("$MPElement[Name='System!System.Entity']/DisplayName$", HPHealthCollectionList(CLogs))
Call oInstance.AddProperty("$MPElement[Name='HPSC!HewlettPackard.Servers.HPHealthCollection']/ServerName$", TargetComputer)
Call oDiscoveryData.AddInstance(oInstance)
Set oInstance = Nothing
Else
Call oPropertyBag.AddValue(HPHealthCollectionStateList(CLogs) &amp; ".HealthState", GetStateForHPHealthCollection(mibstatus))
If IsInFailedState(mibStatus) Then Call oPropertyBag.AddValue(HPHealthCollectionStateList(CLogs) &amp; ".FailedComponent", "Integrated Management Log")
End If
If mibStatus &gt;= mibHealth Then mibHealth = 2 ' Green - don't care
End If

If maxIndex &gt;= 23 Then
' Other MIB=2,4,10,11,13,17,19,20,21, 22 [plus 6/Health minus CPower&amp;CFans&amp;CTemperature&amp;CLog]
failedComponent = "N/A"
mibstatus = 0
If mibStatusArray(2 * 4) = 1 AND mibstatus &lt; mibStatusArray((2 * 4) + 1) Then mibstatus = mibStatusArray((2 * 4) + 1) : failedComponent = "Base System"
If mibStatusArray(4 * 4) = 1 AND mibstatus &lt; mibStatusArray((4 * 4) + 1) Then mibstatus = mibStatusArray((4 * 4) + 1)
If mibStatusArray(10 * 4) = 1 AND mibstatus &lt; mibStatusArray((10 * 4) + 1) Then mibstatus = mibStatusArray((10 * 4) + 1) : failedComponent = "Threshold Management"
If mibStatusArray(11 * 4) = 1 AND mibstatus &lt; mibStatusArray((11 * 4) + 1) Then mibstatus = mibStatusArray((11 * 4) + 1) : failedComponent = "Operating System"
If mibStatusArray(13 * 4) = 1 AND mibstatus &lt; mibStatusArray((13 * 4) + 1) Then mibstatus = mibStatusArray((13 * 4) + 1)
If mibStatusArray(17 * 4) = 1 AND mibstatus &lt; mibStatusArray((17 * 4) + 1) Then mibstatus = mibStatusArray((17 * 4) + 1) : failedComponent = "External Non HP Devices"
If mibStatusArray(19 * 4) = 1 AND mibstatus &lt; mibStatusArray((19 * 4) + 1) Then mibstatus = mibStatusArray((19 * 4) + 1) : failedComponent = "Windows"
If mibStatusArray(20 * 4) = 1 AND mibstatus &lt; mibStatusArray((20 * 4) + 1) Then mibstatus = mibStatusArray((20 * 4) + 1)
If mibStatusArray(21 * 4) = 1 AND mibstatus &lt; mibStatusArray((21 * 4) + 1) Then mibstatus = mibStatusArray((21 * 4) + 1) : failedComponent = "Appliance"
If mibStatusArray(22 * 4) = 1 AND mibstatus &lt; mibStatusArray((22 * 4) + 1) Then mibHealth = mibStatusArray((22 * 4) + 1) : failedComponent = "Enclosure"
If mibHealth &gt; mibstatus Then mibstatus = mibHealth : failedComponent = "Other System Health (UID, POST)"

If Mode = "Discovery" Then
Set oInstance = oDiscoveryData.CreateClassInstance("$MPElement[Name='HewlettPackard.Servers.ProLiant.SNMP.HPProLiantSNMPServerOthers']$")
Call oInstance.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.Computer']/PrincipalName$", PrincipalName)
Call oInstance.AddProperty("$MPElement[Name='HPSC!HewlettPackard.Servers.HPServer']/NetworkName$", TargetComputer)
Call oInstance.AddProperty("$MPElement[Name='System!System.Entity']/DisplayName$", HPHealthCollectionList(COther))
Call oInstance.AddProperty("$MPElement[Name='HPSC!HewlettPackard.Servers.HPHealthCollection']/ServerName$", TargetComputer)
Call oDiscoveryData.AddInstance(oInstance)
Set oInstance = Nothing
Else
Call oPropertyBag.AddValue(HPHealthCollectionStateList(COther) &amp; ".HealthState", GetStateForHPHealthCollection(mibStatus))
If IsInFailedState(mibStatus) Then Call oPropertyBag.AddValue(HPHealthCollectionStateList(COther) &amp; ".FailedComponent", failedComponent)
End If
End If

' Submit the data
If Mode = "Discovery" Then
Call oAPI.Return(oDiscoveryData)
Else
Call oAPI.Return(oPropertyBag)
End If

Set oDiscoveryData = Nothing
Set oPropertyBag = Nothing
Set oAPI = Nothing

End Sub

Function GetStateForHPHealthCollection(mib)
GetStateForHPHealthCollection = GetState(GetStateIndex(mib))
End Function

Function GetStateIndex(mib)
Select Case mib
Case 1 GetStateIndex = STATE_NONE
Case 2 GetStateIndex = STATE_SUCCESS
Case 3 GetStateIndex = STATE_WARNING
Case 4 GetStateIndex = STATE_ERROR
Case 5 GetStateIndex = STATE_ERROR
Case Else GetStateIndex = STATE_NONE
End Select
End Function

Function GetState(stateLevel)
Select Case stateLevel
Case STATE_SUCCESS GetState = "HealthSuccess"
Case STATE_WARNING GetState = "HealthWarning"
Case STATE_ERROR GetState = "HealthError"
Case Else GetState = "HealthUnknown"
End Select
End Function

Function IsInFailedState(mib)
IsInFailedState = false
If GetStateIndex(mib) = STATE_WARNING OR GetStateIndex(mib) = STATE_ERROR Then IsInFailedState = true
End Function

Function ThrowScriptError(sMessage, oErr)
' ThrowScriptError :: Creates an event and sends it back to the mom server
'Call oAPI.LogScriptEvent("Hewlett-PackardProLiantSNMPHealthDiscoveryScript", 1001, 1, sMessage)
Call oAPI.LogScriptEvent("Hewlett-PackardProLiantSNMPHealthMonitorScript", 1002, 1, sMessage)
WScript.Quit(0)
End Function

Function ConvertToString(sString)
If IsNull(sString) Then
ConvertToString = ""
Exit Function
End If

ConvertToString = CStr(sString)
End Function

Function ThreeDigit(iIndex)
Dim result
result = CStr(iIndex)
If Len(result) = 1 Then result = "00" &amp; result
If Len(result) = 2 Then result = "0" &amp; result
If Len(result) &gt; 3 Then result = "000"

ThreeDigit = result
End Function

Function InitializeWithParamerts(TargetComputer)
InitializeWithParamerts = True
Set Sh = CreateObject("WScript.Shell")

' Setting up remote registry access
On Error Resume Next
Set Registry = GetObject("winmgmts://" &amp; TargetComputer &amp; "/root/default:StdRegProv")
If IsEmpty(Registry) Then
ThrowScriptError "Unable to connect WMI: /root/default:StdRegProv. Check to see if the WMI service is enabled and running, and ensure this WMI namespace exists on " &amp; TargetComputer &amp; ".", Err
InitializeWithParamerts = False
End If
On Error Goto 0
End Function

Main()
</Script></Contents>
<Unicode>1</Unicode>
</File>
</Files>
</DataSource>
</MemberModules>
<Composition>
<Node ID="DS"/>
</Composition>
</Composite>
</ModuleImplementation>
<OutputType>System!System.PropertyBagData</OutputType>
</DataSourceModuleType>