'This script discovers the following:
'1. All applcations in a group and 'group hosts application' relations
'2. All hosts in a group and 'group hosts host' relations
Dim oArgs
Set oArgs = WScript.Arguments
if oArgs.Count < 5 Then
Wscript.Quit -1
End If
Dim SourceID, ManagedEntityId, TargetComputer, DataBaseServer, DataBaseName
Dim GroupWbemObjSet, objGroupProperties, objGroupPropertiesSCOM, strGroupQuery
Dim HostWbemObjSet, objHostProperties, objHostPropertiesSCOM, strHostQuery
Dim strBizTalkGroupName, strWMIBaseClass
'Constant definitions
strBizTalkGroupName = "$Target/Property[Type='Microsoft.BizTalk.Server.2013R2.BizTalkGroup']/Name$"
strWMIBaseClass = "MicrosoftBizTalkServer"
strGroupQuery = "select * from MSBTS_GroupSetting where Name='" & Replace(strBizTalkGroupName, "\", "\\") & "'"
strHostQuery = "select * from MSBTS_HostSetting"
Call GetBizTalkApplications()
Sub GetBizTalkApplications()
Dim defaultConnStr
Dim objAPI, objDiscoveryData
defaultConnStr = "Server=" & DataBaseServer & ";Database=" & DataBaseName & ";Trusted_Connection=yes"
Set objAPI = CreateObject("MOM.ScriptAPI")
Set objDiscoveryData = objAPI.CreateDiscoveryData(0, SourceId, ManagedEntityId)
CreateObjectsAndRelations defaultConnStr, objAPI, objDiscoveryData
Call objAPI.Return(objDiscoveryData)
End Sub
Function CreateObjectsAndRelations(defaultConnStr, byRef objAPI, byRef objDiscoveryData)
Dim ObjError
Set ObjError = New Error
Dim cnADOConnection
Set cnADOConnection = MomCreateObject("ADODB.Connection")
cnADOConnection.Provider = "sqloledb"
cnADOConnection.ConnectionTimeout = 15
ObjError.Clear
On Error Resume Next
cnADOConnection.Open defaultConnStr
ObjError.Save
On Error Goto 0
If 0 <> Err.number then
'Error event to goin here
CreateObjectsAndRelations = APP_DISCOVERY_CONNECT_FAILURE
Exit Function
End If
Dim objResults
ObjError.Clear
On Error Resume Next
Set objResults = cnADOConnection.Execute("select nID, nvcName, isDefault, isSystem from bts_application with (NoLock)")
ObjError.Save
On Error Goto 0
If ObjError.Number <> 0 Then
' Error event to go in here
CreateObjectsAndRelations = APP_DISCOVERY_QUERY_FAILURE
If (objResults <> null) Then objResults.Close
Exit Function
End If
Set GroupWbemObjSet = GetWMICollection(TargetComputer, strWMIBaseClass, strGroupQuery)
Set HostWbemObjSet = GetWMICollection(TargetComputer, strWMIBaseClass, strHostQuery)
Dim WbemGroupObject, WbemHostObject
Dim objGroupInst, objGroupProp
Dim objHostInst, objHostProp
Dim strEval
Dim objApplicationInst
For Each WbemGroupObject In GroupWbemObjSet
'Create group object
Set objGroupInst = objDiscoveryData.CreateClassInstance("$MPElement[Name='Microsoft.BizTalk.Server.2013R2.BizTalkGroup']$")
For index = 0 to GroupPropsCount-1
objGroupProp = objGroupProperties(index)
strEval = Eval(IsObject(WbemGroupObject.Properties_(objGroupProp)))
If (strEval <> "False") Then
call objGroupInst.AddProperty(objGroupPropertiesSCOM(index), WbemGroupObject.Properties_(objGroupProp).value)
End If
Next
call objGroupInst.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.Computer']/PrincipalName$", TargetComputer)
'Create all host objects as well as relationship with group
For Each WbemHostObject in HostWbemObjSet
Set objHostInst = objDiscoveryData.CreateClassInstance("$MPElement[Name='Microsoft.BizTalk.Server.2013R2.BizTalkHost']$")
For index = 0 to HostPropsCount-1
objHostProp = objHostProperties(index)
strEval = Eval(IsObject(WbemHostObject.Properties_(objHostProp)))
If (strEval <> "False") Then
Call objHostInst.AddProperty(objHostPropertiesSCOM(index), WbemHostObject.Properties_(objHostProp).value)
End If
Next
Call objHostInst.AddProperty("$MPElement[Name='Microsoft.BizTalk.Server.2013R2.BizTalkGroup']/MgmtDbName$", DataBaseName)
Call objHostInst.AddProperty("$MPElement[Name='Microsoft.BizTalk.Server.2013R2.BizTalkGroup']/MgmtDbServerName$", DataBaseServer)
Call objHostInst.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.Computer']/PrincipalName$", TargetComputer)
Call objDiscoveryData.AddInstance(objHostInst)
CreateRelationShip objDiscoveryData, objGroupInst, objHostInst, "$MPElement[Name='Microsoft.BizTalk.Server.2013R2.BizTalkGroupHostsHosts']$"
Next
'Create all application objects as well as relationship with group
Do While Not objResults.EOF
If CStr(objResults(3)) = CStr(False) Then
Set objApplicationInst = objDiscoveryData.CreateClassInstance("$MPElement[Name='Microsoft.BizTalk.Server.2013R2.BizTalkApplication']$")
Call objApplicationInst.AddProperty("$MPElement[Name='Microsoft.BizTalk.Server.2013R2.BizTalkGroup']/MgmtDbName$", DataBaseName)
Call objApplicationInst.AddProperty("$MPElement[Name='Microsoft.BizTalk.Server.2013R2.BizTalkGroup']/MgmtDbServerName$", DataBaseServer)
Call objApplicationInst.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.Computer']/PrincipalName$", TargetComputer)
Call objApplicationInst.AddProperty("$MPElement[Name='Microsoft.BizTalk.Server.2013R2.BizTalkApplication']/Name$", CStr(objResults(1)))
Call objApplicationInst.AddProperty("$MPElement[Name='Microsoft.BizTalk.Server.2013R2.BizTalkApplication']/ID$", CStr(objResults(0)))
Call objApplicationInst.AddProperty("$MPElement[Name='Microsoft.BizTalk.Server.2013R2.BizTalkApplication']/IsDefault$", objResults(2))
Call objDiscoveryData.AddInstance(objApplicationInst)
CreateRelationShip objDiscoveryData, objGroupInst, objApplicationInst, "$MPElement[Name='Microsoft.BizTalk.Server.2013R2.BizTalkGroupHostsApplications']$"
End If
objResults.MoveNext
Loop
Next
cnADOConnection.Close
End Function
Function GetWMICollection(TargetComputer, strWMIBaseClass, strQuery)
Dim WbemSrv, WbemObjectSet
Set WbemSrv = Getobject("winmgmts:{impersonationLevel=impersonate}!\\" & TargetComputer & "\root\" & strWMIBaseClass)
Set WbemObjectSet = WbemSrv.ExecQuery(strQuery)
Set GetWMICollection = WbemObjectSet
End Function
Function CreateRelationShip(byRef objDiscoveryData, SourceObject, TargetObject, strRelationShipClassId)
Dim objRelation
Set objRelation = objDiscoveryData.CreateRelationshipInstance(strRelationShipClassId)
objRelation.Source = SourceObject
objRelation.Target = TargetObject
objDiscoveryData.AddInstance objRelation
End Function
Function MomCreateObject(ByVal sProgramId)
Dim ObjError
Set ObjError = New Error
On Error Resume Next
Set MomCreateObject = CreateObject(sProgramId)
ObjError.Save
On Error Goto 0
If ObjError.Number <> 0 Then WScript.Quit
End Function
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>
</DataSource>
</MemberModules>
<Composition>
<Node ID="DataSource"/>
</Composition>
</Composite>
</ModuleImplementation>
<OutputType>System!System.Discovery.Data</OutputType>
</DataSourceModuleType>