Microsoft.SystemCenter.VirtualMachineManager.2007.VMMDatabaseDiscovery (DataSourceModuleType)

Element properties:

TypeDataSourceModuleType
IsolationAny
AccessibilityInternal
RunAsDefault
OutputTypeSystem.Discovery.Data

Member Modules:

ID Module Type TypeId RunAs 
DS DataSource System.CommandExecuterDiscoveryDataSource Default

Overrideable Parameters:

IDParameterTypeSelector
IntervalSecondsint$Config/IntervalSeconds$

Source Code:

<DataSourceModuleType ID="Microsoft.SystemCenter.VirtualMachineManager.2007.VMMDatabaseDiscovery" Accessibility="Internal">
<Configuration>
<xsd:element name="IntervalSeconds" type="xsd:integer"/>
<xsd:element name="ComputerID" type="xsd:string"/>
</Configuration>
<OverrideableParameters>
<OverrideableParameter ID="IntervalSeconds" ParameterType="int" Selector="$Config/IntervalSeconds$"/>
</OverrideableParameters>
<ModuleImplementation>
<Composite>
<MemberModules>
<DataSource ID="DS" TypeID="System!System.CommandExecuterDiscoveryDataSource">
<IntervalSeconds>$Config/IntervalSeconds$</IntervalSeconds>
<ApplicationName>%windir%\System32\cscript.exe</ApplicationName>
<WorkingDirectory/>
<CommandLine>/nologo $file/DiscoverVMMDatabase.vbs$ $MPElement$ $Target/Id$ $Config/ComputerID$</CommandLine>
<TimeoutSeconds>30</TimeoutSeconds>
<RequireOutput>true</RequireOutput>
<Files>
<File>
<Name>DiscoverVMMDatabase.vbs</Name>
<Contents><Script>
' Copyright (c) Microsoft Corporation. All rights reserved.
' VBScript source code
' DiscoverVMMDatabase.vbs
' Arg 0 : SourceID
' Arg 1 : MP Element ID
' Arg 2 : Computer ID
Option Explicit

' Reg string const
Const StrVMMManagementGroupInstallationRegKey = "HKLM\SOFTWARE\Microsoft\Microsoft System Center Virtual Machine Manager 2007 Server\Setup\InstallPath"
Const StrVirtualServerRegKey = "HKLM\System\CurrentControlSet\Services\Virtual Server\Start"
Const StrVMMServerInstallationRegKey = "HKLM\SOFTWARE\Microsoft\Microsoft System Center Virtual Machine Manager 2007 Server\Setup\InstallPath"
Const StrVMMSelfServiceServerInstallationRegKey = "HKLM\SOFTWARE\Microsoft\Microsoft System Center Virtual Machine Manager 2007 Self-Service Portal\Setup\InstallPath"
Const StrVMMDatabaseServerRegKey = "HKLM\SOFTWARE\Microsoft\Microsoft System Center Virtual Machine Manager 2007 Server\Settings\Sql\OnRemoteServer"
Const StrVMMDatabaseNameRegKey = "HKLM\SOFTWARE\Microsoft\Microsoft System Center Virtual Machine Manager 2007 Server\Settings\Sql\DatabaseName"
Const StrVMMDatabaseInstanceRegKey = "HKLM\SOFTWARE\Microsoft\Microsoft System Center Virtual Machine Manager 2007 Server\Settings\Sql\InstanceName"
Const StrVMMRemoteDatabaseMachineFQDNRegKey = "HKLM\SOFTWARE\Microsoft\Microsoft System Center Virtual Machine Manager 2007 Server\Settings\Sql\MachineFQDN"
Const EnableMOMTracingRegKey = "HKLM\SOFTWARE\Microsoft\Microsoft System Center Virtual Machine Manager 2007 Server\Setup\Enable_MOM_Tracing"

Const StrWebsitDisplayName = "Microsoft System Center Virtual Machine Manager 2007 Self-Service Portal"
Const StrSQLServerDefaultInstance = "MSSQLSERVER"


'=============
' Method: HasRegistry
' Description: This function returns true if the registry exists; otherwise returns false
'=============
Function HasRegistry(ByVal regString)
Dim bHasRegistry
Dim oReg
Set oReg = CreateObject("WScript.Shell")

On Error Resume Next
Dim sValue
sValue = oReg.RegRead(regString)
If Err.number &lt;&gt; 0 Then
bHasRegistry = False
Else
bHasRegistry = True
End If
On Error Goto 0

HasRegistry = bHasRegistry
End Function

'=============
' Method: ReadRegistry
' Description: This function reads the registry, returns true if the registry exists; otherwise returns false
'=============
Function ReadRegistry(ByVal regString, ByRef regValue)
Dim bHasRegistry
Dim oReg
Set oReg = CreateObject("WScript.Shell")

On Error Resume Next
regValue = oReg.RegRead(regString)
If Err.number &lt;&gt; 0 Then
bHasRegistry = False
Else
bHasRegistry = True
End If
On Error Goto 0

ReadRegistry = bHasRegistry
End Function

Call Main()

'=============
' Method: Main
' Description: This sub discovers VMMDatabase instance and adds its containment relationship with Engine server
'=============
Sub Main()
Dim oArgs
Set oArgs = WScript.Arguments
if oArgs.Count &lt;&gt; 3 Then
WScript.Quit()
End If

Dim SourceID, ManagedEntityId, TargetComputer, DatabaseName, InstanceName
SourceId = oArgs(0)
ManagedEntityId = oArgs(1)
TargetComputer = oArgs(2)

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

If HasRegistry(EnableMOMTracingRegKey) Then
oAPI.LogScriptEvent "DiscoverVMMDatabase.vbs runs", 2, 2, "TargetComputer " &amp; TargetComputer
End If

' Discover VMMDatabase instance
Dim oVMMDatabaseInst, oVMMEngineInst
DiscoverVMMDatabase oDiscoveryData, oVMMDatabaseInst, TargetComputer

' It is the engine machine. It is safe to reconstruct the engine and add the relationship
ReconstructVMMEngine oDiscoveryData, oVMMEngineInst, TargetComputer ' Reconstruct the Engine instance only for adding containment relationship
' Add containment relationship with SelfService
AddRelationShip oDiscoveryData, oVMMEngineInst, oVMMDatabaseInst, "$MPElement[Name='Microsoft.SystemCenter.VirtualMachineManager.2007.EngineContainsDatabase']$"

Call oAPI.Return(oDiscoveryData)
End Sub

'=============
' Method: DiscoverVMMDatabase
' Description: This sub discovers and creates Database instance, adds it to discovery data
'=============
Sub DiscoverVMMDatabase(ByRef oDiscoveredData, ByRef oVMMDatabaseInst, ByVal engineComputer)
Dim oRemote, hostComputer, instanceName, databaseName, tmp
If ReadRegistry(StrVMMDatabaseServerRegKey, oRemote) Then
If oRemote = 0 Then 'local
hostComputer = engineComputer
Else
tmp = ReadRegistry(StrVMMRemoteDatabaseMachineFQDNRegKey, hostComputer)
End If
tmp = ReadRegistry(StrVMMDatabaseInstanceRegKey,instanceName)
If instanceName = "" Then
instanceName = StrSQLServerDefaultInstance
End If
tmp = ReadRegistry(StrVMMDatabaseNameRegKey,databaseName)

set oVMMDatabaseInst = oDiscoveredData.CreateClassInstance("$MPElement[Name='Microsoft.SystemCenter.VirtualMachineManager.2007.Database']$")
With oVMMDatabaseInst
.AddProperty "$MPElement[Name='Windows!Microsoft.Windows.Computer']/PrincipalName$", hostComputer
.AddProperty "$MPElement[Name='SQLCommon!Microsoft.SQLServer.ServerRole']/InstanceName$", instanceName
.AddProperty "$MPElement[Name='SQLCommon!Microsoft.SQLServer.Database']/DatabaseName$", databaseName
End With
oDiscoveredData.AddInstance(oVMMDatabaseInst)
End If
End Sub

'=============
' Method: ReconstructVMMEngine
' Description: This sub reconstructs Engine instance
'=============
Sub ReconstructVMMEngine(ByRef oDiscoveredData, ByRef oEngineInst, ByVal hostComputer)
set oEngineInst = oDiscoveredData.CreateClassInstance("$MPElement[Name='Microsoft.SystemCenter.VirtualMachineManager.2007.Engine']$")
With oEngineInst
.AddProperty "$MPElement[Name='Windows!Microsoft.Windows.Computer']/PrincipalName$", hostComputer
End With
oDiscoveredData.AddInstance(oEngineInst)
End Sub

'=============
' Method: AddRelationShip
' Description: This sub adds relationship to discovery data
'=============
Sub AddRelationShip(ByRef oDiscoveredData, ByRef oSourceInst, ByRef oTargetInst, ByVal sRelationShip)
If Not (IsNull(oSourceInst) or IsNull(oTargetInst)) Then
Dim oRelationInst
set oRelationInst = oDiscoveredData.CreateRelationshipInstance(sRelationShip)
oRelationInst.Source = oSourceInst
oRelationInst.Target = oTargetInst
call oDiscoveredData.AddInstance(oRelationInst)
End If
End Sub
</Script></Contents>
</File>
</Files>
</DataSource>
</MemberModules>
<Composition>
<Node ID="DS"/>
</Composition>
</Composite>
</ModuleImplementation>
<OutputType>System!System.Discovery.Data</OutputType>
</DataSourceModuleType>