WMI functional Check Probe

Microsoft.SystemCenter.WMIFunctionalCheck.Probe (ProbeActionModuleType)

Probe for the WMI Functional Check

Element properties:

TypeProbeActionModuleType
IsolationAny
AccessibilityInternal
RunAsDefault
InputTypeSystem.BaseData
OutputTypeSystem.PropertyBagData

Member Modules:

ID Module Type TypeId RunAs 
Probe ProbeAction Microsoft.Windows.ScriptPropertyBagProbe Default

Overrideable Parameters:

IDParameterTypeSelectorDisplay NameDescription
TimeoutSecondsint$Config/TimeoutSeconds$Time out SecondsTime to wait until cancel execution of script expressed in seconds

Source Code:

<ProbeActionModuleType ID="Microsoft.SystemCenter.WMIFunctionalCheck.Probe" Accessibility="Internal" Batching="false" PassThrough="false">
<Configuration>
<xsd:element minOccurs="1" name="ComputerName" type="xsd:string"/>
<xsd:element minOccurs="1" name="TimeoutSeconds" type="xsd:integer"/>
</Configuration>
<OverrideableParameters>
<OverrideableParameter ID="TimeoutSeconds" Selector="$Config/TimeoutSeconds$" ParameterType="int"/>
</OverrideableParameters>
<ModuleImplementation Isolation="Any">
<Composite>
<MemberModules>
<ProbeAction ID="Probe" TypeID="Windows!Microsoft.Windows.ScriptPropertyBagProbe">
<ScriptName>WMIFunctionalCheck.vbs</ScriptName>
<Arguments>"$Config/ComputerName$"</Arguments>
<ScriptBody><Script>
'Copyright (c) Microsoft Corporation. All rights reserved.

'*************************************************************************
' $ScriptName: "WMIFunctionalCheck" $
'
' Purpose: This script runs a WMI functional check.
'
' $File: WMIFunctionalCheck.vbs $
'*************************************************************************

Option Explicit

'Declarations
Dim oArgs,oAPI, oPropertyBag
Dim strComputerName, strMessageToUse, strWMIStatus

'Define local event constants
Const EVENT_TYPE_ERROR = 1
Const EVENT_TYPE_WARNING = 2
Const EVENT_TYPE_INFORMATION = 4

SetLocale("en-us")

' Create PropertyBag object
Set oAPI = CreateObject("MOM.ScriptAPI")
Set oArgs = WScript.Arguments
Set oPropertyBag = oAPI.CreatePropertyBag()


'Define parameters
strComputerName = oArgs(0)

Dim ObjError
Set ObjError = New Error

On Error Resume Next

'Set variables
strWMIStatus = GetWMIStatus(strComputerName)

ObjError.Save
On Error Goto 0

If ObjError.Number &lt;&gt; 0 Then
strMessageToUse = "Error Number: " &amp; ObjError.number &amp; " Error Details: " &amp; ObjError.Description
call ReturnResponse(true, strMessageToUse)
Else
strMessageToUse = "Script WMIFunctionalCheck executed Successfully"
call ReturnResponse(false, strMessageToUse)
End If


'---------------------------------------------------------------------------
' Retrieves the script output.
'---------------------------------------------------------------------------
Sub ReturnResponse(boolErrorFlag, strMessage)
If boolErrorFlag = true Then
oPropertyBag.AddValue "Status", "FAIL"
oPropertyBag.AddValue "ErrorMessage", strMessage
Else
oPropertyBag.AddValue "Status", "OK"
End If

oAPI.LogScriptEvent "WMIFunctionalCheck.vbs",100,EVENT_TYPE_INFORMATION, strMessage
Call oAPI.Return(oPropertyBag)
WScript.Quit
End Sub

'---------------------------------------------------------------------------
' Gets WMI Status.
'---------------------------------------------------------------------------
Function GetWMIStatus(strComputerName)
Dim Status
Status = ExecuteWMIQuery(strComputerName, "cimv2", "select Status from win32_operatingsystem", "Status")

If Status = "OK" Then
GetWMIStatus = "OK"
Else
GetWMIStatus = "FAIL"
End If
End Function

'---------------------------------------------------------------------------
' Retrieves a WMI object from the specified namespace.
'---------------------------------------------------------------------------
Function GetWMIObject(ByVal sNamespace)
dim oWMI

'get the object
on error resume next
set oWMI = GetObject(sNamespace)
ObjError.Save
on error goto 0

'did it work?
if IsEmpty(oWMI) then
'no
strMessageToUse = "Error Number: " &amp; ObjError.number &amp; " Unable to open WMI Namespace '" &amp; sNamespace &amp; "'. Check to see if the WMI service is enabled and running, and ensure this WMI namespace exists."
call ReturnResponse(true, strMessageToUse)
end if

set GetWMIObject = oWMI
End Function

'---------------------------------------------------------------------------
' Execute a WMI Query.
'---------------------------------------------------------------------------
Function ExecuteWMIQuery(TargetComputer, strBaseClass, strQuery, strPropertyName)
Dim WbemSrv, WbemObjectSet, objItem
Set WbemSrv = GetWMIObject("winmgmts:{impersonationLevel=impersonate}!\\" &amp; TargetComputer &amp; "\root\" &amp; strBaseClass)
Set WbemObjectSet = WbemSrv.ExecQuery(strQuery)
For Each objItem in WbemObjectSet
ExecuteWMIQuery = objItem.Properties_(strPropertyName).value
Next
End Function

'---------------------------------------------------------------------------
' Error Handling Class
'---------------------------------------------------------------------------
Class Error
Private m_lNumber
Private m_sSource
Private m_sDescription
Private m_sHelpContext
Private m_sHelpFile

Public Sub Save()
m_lNumber = Err.number
m_sSource = Err.Source
m_sDescription = Err.Description
m_sHelpContext = Err.HelpContext
m_sHelpFile = Err.helpfile
End Sub

Public Sub Raise()
Err.Raise m_lNumber, m_sSource, m_sDescription, m_sHelpFile, m_sHelpContext
End Sub

Public Sub Clear()
m_lNumber = 0
m_sSource = ""
m_sDescription = ""
m_sHelpContext = ""
m_sHelpFile = ""
End Sub

Public Default Property Get Number()
Number = m_lNumber
End Property

Public Property Get Source()
Source = m_sSource
End Property

Public Property Get Description()
Description = m_sDescription
End Property

Public Property Get HelpContext()
HelpContext = m_sHelpContext
End Property

Public Property Get HelpFile()
HelpFile = m_sHelpFile
End Property
End Class

</Script></ScriptBody>
<TimeoutSeconds>$Config/TimeoutSeconds$</TimeoutSeconds>
</ProbeAction>
</MemberModules>
<Composition>
<Node ID="Probe"/>
</Composition>
</Composite>
</ModuleImplementation>
<OutputType>System!System.PropertyBagData</OutputType>
<InputType>System!System.BaseData</InputType>
</ProbeActionModuleType>