<Discovery ID="Microsoft.SystemCenter.Essentials.Internal.SCEServer.Discovery" Enabled="true" Target="SC!Microsoft.SystemCenter.RootManagementServer" ConfirmDelivery="false" Remotable="true" Priority="Normal">
<Category>Discovery</Category>
<DiscoveryTypes/>
<DataSource ID="DS" TypeID="Windows!Microsoft.Windows.TimedScript.DiscoveryProvider">
<IntervalSeconds>86400</IntervalSeconds>
<SyncTime/>
<ScriptName>DiscoverSceServer.vbs</ScriptName>
<Arguments>$MPElement$ $Target/Id$</Arguments>
<ScriptBody><Script>
'*************************************************************************
'Copyright (c) Microsoft Corporation. All rights reserved.
' Parameters that should be passed to this script
' 0 MPElement ID ($MPElement$)
' 1 Target Id for ME this rule is running against ($Target/Id$)
'*************************************************************************
Option Explicit
SetLocale("en-us")
CONST HKLM = &H80000002
Dim oArgs
Set oArgs = WScript.Arguments
if oArgs.Count <> 2 Then
Quit()
End If
Dim SourceID, ManagedEntityId
SourceId = oArgs(0)
ManagedEntityId = oArgs(1)
Dim oAPI, oDiscoveryData
Set oAPI = MOMCreateObject("MOM.ScriptAPI")
set oDiscoveryData = oAPI.CreateDiscoveryData(0, SourceId, ManagedEntityId)
If DoDiscovery(oDiscoveryData) >= 0 Then
Call oAPI.Return(oDiscoveryData)
Else
Quit()
End If
Function DoDiscovery(ByVal oDisc)
Dim objReg, sqlInstance, sqlPort
Set objReg = GetObject("winmgmts:root\default:StdRegProv")
If IsNull(objReg) Then
ScriptError "Error connecting to WMI Registry provide. " & GetErrorString(Err)
Else
objReg.GetStringValue HKLM, "SOFTWARE\Microsoft\Microsoft Operations Manager\3.0\Setup", "DatabaseServerName", sqlInstance
objReg.GetStringValue HKLM, "SOFTWARE\Microsoft\Microsoft Operations Manager\3.0\Setup", "SqlInstancePort", sqlPort
End If
If IsNull(sqlInstance) = False Then
If IsNull(sqlPort) Then
sqlPort = ""
End If
Dim oEssentialsServerInstance
'' Discover Essentials Server
Set oEssentialsServerInstance = oDiscoveryData.CreateClassInstance("$MPElement[Name='System.SCE.Server']$")
With oEssentialsServerInstance
.AddProperty "$MPElement[Name='System.SCE.Server']/SqlServerInstance$", sqlInstance
.AddProperty "$MPElement[Name='System.SCE.Server']/SqlServerPort$", sqlPort
End With
call oDisc.AddInstance(oEssentialsServerInstance)
End If
DoDiscovery = 0
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
'*************************************************************************
Function ThrowScriptErrorNoAbort(ByVal sMessage, ByVal oErr)
'
' ThrowScriptError :: Creates an event and sends it back to the mom server
'
'*************************************************************************
Dim sErrDescription, sErrNumber
sErrDescription = oErr.Description
sErrNumber = oErr.Number
End Function
'*************************************************************************
Function ThrowScriptError(Byval sMessage, ByVal oErr)
'
' ThrowScriptError :: Creates an event and sends it back to the mom server
'
'*************************************************************************
On Error Resume Next
ThrowScriptErrorNoAbort sMessage, oErr
Quit()
End Function
'*************************************************************************
Function MomCreateObject(ByVal sProgramId)
Dim oError
Set oError = New Error
On Error Resume Next
Set MomCreateObject = CreateObject(sProgramId)
oError.Save
On Error Goto 0
If oError.Number <> 0 Then ThrowScriptError "Unable to create automation object '" & sProgramId & "'", oError
End Function
'*************************************************************************
Function Quit()
WScript.Quit()
End Function
'*************************************************************************