Infront.Virtual.Machine.Discovery.VMwareTools.DataSource (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:

IDParameterTypeSelector
IntervalSecondsint$Config/IntervalSeconds$

Source Code:

<DataSourceModuleType ID="Infront.Virtual.Machine.Discovery.VMwareTools.DataSource" Accessibility="Internal" Batching="false">
<Configuration>
<xsd:element minOccurs="1" name="IntervalSeconds" type="xsd:integer"/>
<xsd:element minOccurs="1" name="ComputerName" type="xsd:string"/>
<xsd:element minOccurs="1" name="TimeoutSeconds" type="xsd:integer"/>
</Configuration>
<OverrideableParameters>
<OverrideableParameter ID="IntervalSeconds" Selector="$Config/IntervalSeconds$" ParameterType="int"/>
</OverrideableParameters>
<ModuleImplementation Isolation="Any">
<Composite>
<MemberModules>
<DataSource ID="DS" TypeID="Windows!Microsoft.Windows.TimedScript.DiscoveryProvider">
<IntervalSeconds>$Config/IntervalSeconds$</IntervalSeconds>
<SyncTime/>
<ScriptName>DiscoverVMwareTools.vbs</ScriptName>
<Arguments>$MPElement$ $Target/Id$ $Config/ComputerName$</Arguments>
<ScriptBody><Script>'==========================================================================
'
' VBScript Source File
'
' NAME: Virtual Machine VMware tools details discovery
'
' AUTHOR: Raphael Burri
' DATE : 12/30/2010
'
' COMMENT:
'
'==========================================================================

Option Explicit

Dim SourceID, ManagedEntityID, TargetComputer
Dim oArgs, oAPI, oDiscoveryData, oBBInst
Dim ToolsInstallPath, IntegrationInstalled, IntegrationServicesVersion



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

SourceID = oArgs(0)
ManagedEntityId = oArgs(1)
TargetComputer = oArgs(2)

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


On Error Resume Next

IntegrationInstalled = vbFalse

'need to look in 32bit registry
'ToolsInstallPath = GetRegKey("Software\VMware, Inc.\VMware Tools", "InstallPath", 32)

'newer VMware servers have 64bit tools as well
' to be safe check for service registry key rather than product
ToolsInstallPath = GetRegKey("SYSTEM\CurrentControlSet\Services\VMTools", "ImagePath", 64)
If Err.number = 0 And Len(ToolsInstallPath) &gt; 0 Then
'registry key found: is installed
IntegrationInstalled = vbTrue
'trim double quotes
ToolsInstallPath = Replace(ToolsInstallPath, """", "")
End If

'Submit virtual BaseBoard discovery data
Set oBBInst = oDiscoveryData.CreateClassInstance("$MPElement[Name='Infront.Virtual.Machine.VMware.BaseBoard.Windows']$")
With oBBInst
'key property
.AddProperty "$MPElement[Name='Windows!Microsoft.Windows.Computer']/PrincipalName$", TargetComputer
'additional properties
.AddProperty "$MPElement[Name='Infront.Virtual.Machine.BaseBoard']/VirtualMachineIsEnlightened$", CBool(IntegrationInstalled)
if IntegrationInstalled = vbTrue Then
'pull version from driver file
'IntegrationServicesVersion = GetFileVersion(ToolsInstallPath)
'get Product Version property instead of just file version
' will reflect VMware version better
IntegrationServicesVersion = GetFileProperty(ToolsInstallPath, "Product Version")

.AddProperty "$MPElement[Name='Infront.Virtual.Machine.BaseBoard']/VirtualMachineToolVersion$", IntegrationServicesVersion
end if

End With
'add instance to discovery
call oDiscoveryData.AddInstance(oBBInst)

'return discovery data
Call oAPI.Return(oDiscoveryData)


Function GetRegKey (sKey, sValue, iArch )

Dim oReg, oWbem, oWbemLoc, oWbemServices
Dim InPara, OutPara
Dim sSetting

Const HKEY_LOCAL_MACHINE = &amp;H80000002

Set oWbem = CreateObject("WbemScripting.SWbemNamedValueSet")
' set platform archidecture flag (32 or 64)
oWbem.Add "__ProviderArchitecture", iArch

Set oWbemLoc = CreateObject("Wbemscripting.SWbemLocator")
Set oWbemServices = oWbemLoc.ConnectServer("","root\default","","",,,,oWbem)
Set oReg = oWbemServices.Get("StdRegProv")

Set Inpara = oReg.Methods_("GetStringValue").Inparameters
Inpara.Hdefkey = HKEY_LOCAL_MACHINE
Inpara.Ssubkeyname = sKey
Inpara.Svaluename = sValue
set Outpara = oReg.ExecMethod_("GetStringValue", Inpara,,oWbem)

GetRegKey = Outpara.sValue

Set oReg = Nothing
Set oWbemLoc = Nothing
Set oWbem = Nothing

End Function

Function GetFileVersion (sFile)
Dim objFSO

Set objFSO = CreateObject("Scripting.FileSystemObject")
GetFileVersion = objFSO.GetFileVersion(sFile)

Set objFSO = Nothing

End Function

Function GetEnvVar (sVar)
Dim objShell

Set objShell = CreateObject( "WScript.Shell" )
GetEnvVar = objShell.ExpandEnvironmentStrings(sVar)

Set objShell = Nothing

End Function

Function GetFileProperty (sFile, sPropertyName)
Dim objFSO, objFile, objShell, objFolder, objFolderItem, i
Dim arrHeaders(300)

Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.GetFile(sFile)
Set objShell = CreateObject("Shell.Application")
Set objFolder = objShell.Namespace(objFSO.GetParentFolderName(objFile))
Set objFolderItem = objFolder.ParseName(objFSO.GetFileName(objFile))
For i = 0 To 300
arrHeaders(i) = objFolder.GetDetailsOf(objFolder.Items, i)
'WScript.Echo i &amp;"- " &amp; arrHeaders(i) &amp; ": " &amp; objFolder.GetDetailsOf(objFolderItem, i)
If Lcase(arrHeaders(i))= LCase(sPropertyName) Then
GetFileProperty = objFolder.GetDetailsOf(objFolderItem, i)
Exit For
End If
Next
End Function

</Script></ScriptBody>
<TimeoutSeconds>$Config/TimeoutSeconds$</TimeoutSeconds>
</DataSource>
</MemberModules>
<Composition>
<Node ID="DS"/>
</Composition>
</Composite>
</ModuleImplementation>
<OutputType>System!System.Discovery.Data</OutputType>
</DataSourceModuleType>