Dim SourceID, ManagedEntityID, TargetComputer
Dim oArgs, oAPI, oDiscoveryData, oBBInst
Dim ToolsInstallPath, IntegrationInstalled, IntegrationServicesVersion
Set oArgs = WScript.Arguments
if oArgs.Count < 3 Then
Wscript.Quit -1
End If
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) > 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 = &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 &"- " & arrHeaders(i) & ": " & objFolder.GetDetailsOf(objFolderItem, i)
If Lcase(arrHeaders(i))= LCase(sPropertyName) Then
GetFileProperty = objFolder.GetDetailsOf(objFolderItem, i)
Exit For
End If
Next
End Function