OpenManage Software Services Discovery Module

Dell.WindowsServer.OM_ServicesDiscovery (DataSourceModuleType)

Element properties:

TypeDataSourceModuleType
IsolationAny
AccessibilityInternal
RunAsDefault
OutputTypeSystem.Discovery.Data

Member Modules:

ID Module Type TypeId RunAs 
DS DataSource Microsoft.Windows.TimedScript.DiscoveryProvider Default

Overrideable Parameters:

IDParameterTypeSelectorDisplay NameDescription
IntervalSecondsint$Config/IntervalSeconds$Interval SecondsInterval in Seconds for the Discovery Cycle
LogLevelint$Config/LogLevel$Log LevelLog Level

Source Code:

<DataSourceModuleType ID="Dell.WindowsServer.OM_ServicesDiscovery" Accessibility="Internal">
<Configuration>
<xsd:element name="IntervalSeconds" type="xsd:integer"/>
<xsd:element name="Computer" type="xsd:string"/>
<xsd:element name="LogLevel" type="xsd:integer"/>
</Configuration>
<OverrideableParameters>
<OverrideableParameter ID="IntervalSeconds" ParameterType="int" Selector="$Config/IntervalSeconds$"/>
<OverrideableParameter ID="LogLevel" ParameterType="int" Selector="$Config/LogLevel$"/>
</OverrideableParameters>
<ModuleImplementation>
<Composite>
<MemberModules>
<DataSource ID="DS" TypeID="Windows!Microsoft.Windows.TimedScript.DiscoveryProvider">
<IntervalSeconds>$Config/IntervalSeconds$</IntervalSeconds>
<SyncTime/>
<ScriptName>DellWinServerOMServicesDiscovery.vbs</ScriptName>
<Arguments>$MPElement$ $Target/Id$ $Config/Computer$ $Config/LogLevel$</Arguments>
<ScriptBody><Script>
'**********************************************************************************
' Script Name - OpenManage Software Services Discovery
' Author: Vignesh Pandian
'
' Description:
' Discover all OpenManage Windows services for a Dell server with instrumentation.
' and create ServerServices model of v4.0
'
' (c) Copyright &#xA9; 2009&#x2013; 2017 Dell Inc, or its subsidiaries. All Rights Reserved
'**********************************************************************************

Option Explicit
On Error Resume Next
SetLocale("en-us")

Dim oArgs
Set oArgs = WScript.Arguments
if oArgs.Count &lt; 4 Then
Wscript.Quit -1
End If

Dim SourceID, ManagedEntityId, TargetComputer
Dim serviceType

Dim LogMessage, ErrorMessage, LogLevel, objLogTextFile, objLogFSO

SourceId = oArgs(0)
ManagedEntityId = oArgs(1)
TargetComputer = oArgs(2)
LogLevel = oArgs(3)

Dim oAPI, oDiscoveryData, oInst
Set oAPI = CreateObject("MOM.ScriptAPI")
set oDiscoveryData = oAPI.CreateDiscoveryData(0, SourceId, ManagedEntityId)

' Create/Open a log file for writing error logs
If LogLevel &lt;&gt; 0 Then
Dim tfolder, fileSize
Dim strFileName, strOutFile
strFileName = "Dell-Connections-MP-Errors.log"
Const ForAppending = 8
Const ForWriting = 2
Const MaxFileSize = 524288 'File Size is limited to 512 KB
Set objLogFSO = CreateObject("Scripting.FileSystemObject")
tfolder = "C:\Temp"
If Not objLogFSO.FolderExists(tfolder) Then
objLogFSO.CreateFolder(tfolder)
End If
strOutFile = tfolder &amp;"\"&amp; strFileName
Set objLogTextFile = objLogFSO.OpentextFile(strOutFile, ForAppending, True)
fileSize = objLogFSO.GetFile(strOutFile).Size
If (fileSize &gt; MaxFileSize) Then
objLogTextFile.Close
Set objLogTextFile = objLogFSO.OpentextFile(strOutFile, ForWriting, True)
End If
LogMessage = Now &amp; ", Dell Server OM Services Discovery"
MOMDebugLog 1, LogMessage
Err.Clear
End If

serviceType = getOMServices()

If serviceType=1 Then
set oInst = oDiscoveryData.CreateClassInstance("$MPElement[Name='Dell.WindowsServer.OMServices']$")
call oInst.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.Computer']/PrincipalName$", TargetComputer)
call oInst.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.LogicalDevice']/DeviceID$", TargetComputer)
call oInst.AddProperty("$MPElement[Name='System!System.Entity']/DisplayName$", "OpenManage Services")
call oDiscoveryData.AddInstance(oInst)
End If

' Submit the data
Call oAPI.Return(oDiscoveryData)

Set oDiscoveryData = Nothing
Set oAPI = Nothing

' Close file used for logs
If LogLevel &lt;&gt; 0 Then
objLogTextFile.Close
Set objLogTextFile = Nothing
Set objLogFSO = Nothing
End If

Function getOMServices()
On Error Resume Next
Dim strComputer, WbemServices, wbemObjectSet, wbemObject, sQuery, flag

strComputer="."
flag = 0

Set WbemServices = GetObject("winmgmts:" &amp; "{impersonationLevel=impersonate}!\\" &amp; strComputer &amp; "\root\cimv2")
If IsEmpty(WbemServices) Or (Err.Number &lt;&gt; 0) Then
LogMessage = "Unable to open WMI Namespace root-cimv2. Check to see if the WMI service is enabled and running, and ensure this WMI namespace exists." &amp; Err.Description
MOMDebugLog 1, LogMessage
Else
sQuery = "SELECT * FROM Win32_Service WHERE Name = 'omsad'"
Set wbemObjectSet = wbemServices.ExecQuery(sQuery)
If IsEmpty(wbemObjectSet) Or Err.Number &lt;&gt; 0 Then
LogMessage = "The Query '" &amp; sQuery &amp; "' returned an invalid result set. Please check to see if this is a valid WMI Query." &amp; Err.Description
MOMDebugLog 1, LogMessage
Err.Clear
Else
For Each wbemObject In wbemObjectSet
If Err.Number &lt;&gt; 0 Then
ErrorMessage = "Win32_Service SubObjectQuery Error Number:" &amp; Err.Number &amp; "Description:" &amp; Err.Description
MOMDebugLog 1, ErrorMessage
Err.Clear
Else
flag = 1
End If
Next
End If
Set wbemObjectSet = Nothing

sQuery = "SELECT * FROM Win32_Service WHERE Name = 'Server Administrator'"
Set wbemObjectSet = wbemServices.ExecQuery(sQuery)
If IsEmpty(wbemObjectSet) Or Err.Number &lt;&gt; 0 Then
ErrorMessage = "The Query '" &amp; sQuery &amp; "' returned an invalid result set. Please check to see if this is a valid WMI Query." &amp; Err.Description
MOMDebugLog 1, ErrorMessage
Err.Clear
Else
For Each wbemObject In wbemObjectSet
If Err.Number &lt;&gt; 0 Then
ErrorMessage = "Win32_Service SubObjectQuery Error Number:" &amp; Err.Number &amp; "Description:" &amp; Err.Description
MOMDebugLog 1, ErrorMessage
Err.Clear
Else
flag = 1
End If
Next
End If
Set wbemObjectSet = Nothing

sQuery = "SELECT * FROM Win32_Service WHERE Name = 'dcstor32'"
Set wbemObjectSet = wbemServices.ExecQuery(sQuery)
If IsEmpty(wbemObjectSet) Or Err.Number &lt;&gt; 0 Then
ErrorMessage = "The Query '" &amp; sQuery &amp; "' returned an invalid result set. Please check to see if this is a valid WMI Query." &amp; Err.Description
MOMDebugLog 1, ErrorMessage
Err.Clear
Else
For Each wbemObject In wbemObjectSet
If Err.Number &lt;&gt; 0 Then
ErrorMessage = "Win32_Service SubObjectQuery Error Number:" &amp; Err.Number &amp; "Description:" &amp; Err.Description
MOMDebugLog 1, ErrorMessage
Err.Clear
Else
flag = 1
End If
Next
End If
Set wbemObjectSet = Nothing

sQuery = "SELECT * FROM Win32_Service WHERE Name = 'dcevt32'"
Set wbemObjectSet = wbemServices.ExecQuery(sQuery)
If IsEmpty(wbemObjectSet) Or Err.Number &lt;&gt; 0 Then
ErrorMessage = "The Query '" &amp; sQuery &amp; "' returned an invalid result set. Please check to see if this is a valid WMI Query." &amp; Err.Description
MOMDebugLog 1, ErrorMessage
Err.Clear
Else
For Each wbemObject In wbemObjectSet
If Err.Number &lt;&gt; 0 Then
ErrorMessage = "Win32_Service SubObjectQuery Error Number:" &amp; Err.Number &amp; "Description:" &amp; Err.Description
MOMDebugLog 1, ErrorMessage
Err.Clear
Else
flag = 1
End If
Next
End If

sQuery = "SELECT * FROM Win32_Service WHERE Name = 'dcstor64'"
Set wbemObjectSet = wbemServices.ExecQuery(sQuery)
If IsEmpty(wbemObjectSet) Or Err.Number &lt;&gt; 0 Then
ErrorMessage = "The Query '" &amp; sQuery &amp; "' returned an invalid result set. Please check to see if this is a valid WMI Query." &amp; Err.Description
MOMDebugLog 1, ErrorMessage
Err.Clear
Else
For Each wbemObject In wbemObjectSet
If Err.Number &lt;&gt; 0 Then
ErrorMessage = "Win32_Service SubObjectQuery Error Number:" &amp; Err.Number &amp; "Description:" &amp; Err.Description
MOMDebugLog 1, ErrorMessage
Err.Clear
Else
flag = 1
End If
Next
End If
Set wbemObjectSet = Nothing

sQuery = "SELECT * FROM Win32_Service WHERE Name = 'dcevt64'"
Set wbemObjectSet = wbemServices.ExecQuery(sQuery)
If IsEmpty(wbemObjectSet) Or Err.Number &lt;&gt; 0 Then
ErrorMessage = "The Query '" &amp; sQuery &amp; "' returned an invalid result set. Please check to see if this is a valid WMI Query." &amp; Err.Description
MOMDebugLog 1, ErrorMessage
Err.Clear
Else
For Each wbemObject In wbemObjectSet
If Err.Number &lt;&gt; 0 Then
ErrorMessage = "Win32_Service SubObjectQuery Error Number:" &amp; Err.Number &amp; "Description:" &amp; Err.Description
MOMDebugLog 1, ErrorMessage
Err.Clear
Else
flag = 1
End If
Next
End If

Set wbemObjectSet = Nothing
End If ' end of initial root-cimv2 connect success call

getOMServices = flag
End Function

Function MOMDebugLog (Message)
On Error resume next
If LogLevel &lt;&gt; 0 Then
objLogTextFile.WriteLine(Message)
Err.Clear
End If
End Function
</Script></ScriptBody>
<TimeoutSeconds>300</TimeoutSeconds>
</DataSource>
</MemberModules>
<Composition>
<Node ID="DS"/>
</Composition>
</Composite>
</ModuleImplementation>
<OutputType>System!System.Discovery.Data</OutputType>
</DataSourceModuleType>