Detecta bases de datos de App Controller
Esta detección detecta las instancias de la base de datos de App Controller.
Nota: Se debe importar un módulo de administración de SQL Server (detección) (p.ej. SQL Server 2008 (detección)) para que esta detección se ejecute correctamente.
Target | Microsoft.SystemCenter.2012.AppController.Server |
Enabled | True |
Frequency | 21600 |
Remotable | False |
Discovered Classes and their attribuets: |
---|
Discovered relationships and their attribuets: |
ID | Module Type | TypeId | RunAs |
---|---|---|---|
DS | DataSource | Microsoft.Windows.TimedScript.DiscoveryProvider | Default |
<Discovery ID="Microsoft.SystemCenter.2012.AppController.Database.Discovery" Target="Microsoft.SystemCenter.2012.AppController.Server" Enabled="true" ConfirmDelivery="false" Remotable="true" Priority="Normal">
<Category>Discovery</Category>
<DiscoveryTypes>
<DiscoveryClass TypeID="Microsoft.SystemCenter.2012.AppController.Database"/>
<DiscoveryRelationship TypeID="Microsoft.SystemCenter.2012.AppController.ServerContainsDatabase"/>
</DiscoveryTypes>
<DataSource ID="DS" TypeID="Windows!Microsoft.Windows.TimedScript.DiscoveryProvider">
<IntervalSeconds>21600</IntervalSeconds>
<SyncTime/>
<ScriptName>DiscoverWebSite.vbs</ScriptName>
<Arguments>$MPElement$ $Target/Id$ $Target/Host/Property[Type="Windows!Microsoft.Windows.Computer"]/PrincipalName$</Arguments>
<ScriptBody> ' Copyright (C) Microsoft. All rights reserved.
' DiscoverDatabase.vbs
Option Explicit
SetLocale("en-us")
Const StrDatabaseInstanceRegKey = "HKLM\SOFTWARE\Microsoft\Microsoft System Center App Controller\Settings\Setup\sql"
Const StrDatabaseNameRegKey = "HKLM\SOFTWARE\Microsoft\Microsoft System Center App Controller\Settings\Setup\sqldb"
Dim oArgs
Set oArgs = WScript.Arguments
If oArgs.Count < 3 Then
Wscript.Quit -1
End If
Dim oAPI
Set oAPI = CreateObject("MOM.ScriptAPI")
Dim SourceId, ManagedEntityId, TargetComputer
SourceId = oArgs(0)
ManagedEntityId = oArgs(1)
TargetComputer = oArgs(2)
Dim strDatabaseInstanceRegValue, strDatabaseNameRegValue
Call ReadRegistry(StrDatabaseInstanceRegKey, strDatabaseInstanceRegValue)
Call ReadRegistry(StrDatabaseNameRegKey, strDatabaseNameRegValue)
Dim strHostname, strDatabaseInstance
ParseDatabaseInstanceRegValue strDatabaseInstanceRegValue, strHostname, strDatabaseInstance
Dim oDiscoveryData, oInst1, oInst2, oRelationship
Set oDiscoveryData = oAPI.CreateDiscoveryData(0, SourceId, ManagedEntityId)
Set oInst1 = oDiscoveryData.CreateClassInstance("$MPElement[Name='Microsoft.SystemCenter.2012.AppController.Database']$")
Call oInst1.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.Computer']/PrincipalName$", Nslookup(strHostname))
Call oInst1.AddProperty("$MPElement[Name='SQLServer!Microsoft.SQLServer.Database']/DatabaseName$", strDatabaseNameRegValue)
Call oInst1.AddProperty("$MPElement[Name='SQLServer!Microsoft.SQLServer.ServerRole']/InstanceName$", strDatabaseInstance)
Call oDiscoveryData.AddInstance(oInst1)
Set oInst2 = oDiscoveryData.CreateClassInstance("$MPElement[Name='Microsoft.SystemCenter.2012.AppController.Server']$")
Call oInst2.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.Computer']/PrincipalName$", TargetComputer)
Call oDiscoveryData.AddInstance(oInst2)
Set oRelationship = oDiscoveryData.CreateRelationshipInstance("$MPElement[Name='Microsoft.SystemCenter.2012.AppController.ServerContainsDatabase']$")
oRelationship.Source = oInst2
oRelationship.Target = oInst1
Call oDiscoveryData.AddInstance(oRelationship)
Call oAPI.Return(oDiscoveryData)
Function ReadRegistry(ByVal strRegKey, ByRef strRegValue)
Dim bRegKeyExists
Dim WshShell
Set WshShell = WScript.CreateObject("WScript.Shell")
On Error Resume Next
strRegValue = WshShell.RegRead(strRegKey)
If Err.number <> 0 Then
bRegKeyExists = False
Else
bRegKeyExists = True
End If
ReadRegistry = bRegKeyExists
End Function
Sub ParseDatabaseInstanceRegValue(ByVal strRegValue, ByRef strHostname, ByRef strDatabaseInstance)
Dim strTempArray
If InStr(strRegValue, "\") Then
strTempArray = Split(strRegValue, "\")
strHostname = strTempArray(0)
strDatabaseInstance = strTempArray(1)
Else
strHostname = strRegValue
strDatabaseInstance = "MSSQLSERVER"
End If
End Sub
Function Nslookup(ByVal strHostname)
Dim WshShell, oExec, strBuffer
Set WshShell = WScript.CreateObject("WScript.Shell")
' TODO: add support for (local) and "."
If strHostname = "localhost" Then
Set oExec = WshShell.Exec("hostname")
Do While Not oExec.StdOut.AtEndOfStream
strHostname = oExec.StdOut.ReadAll
Loop
End If
Set oExec = WshShell.Exec("nslookup " & strHostname)
Do While Not oExec.StdOut.AtEndOfStream
strBuffer = oExec.StdOut.ReadLine
If InStr(strBuffer, "Name:") Then
Nslookup = Trim(Replace(strBuffer, "Name:", ""))
End If
Loop
End Function
</ScriptBody>
<TimeoutSeconds>300</TimeoutSeconds>
</DataSource>
</Discovery>