Discovery Rule for TFS Database Instance

TeamFoundationServer2008.DiscoverTFSDatabaseInstanceRule (Discovery)

Knowledge Base article:

Summary

Discovery Rule for TFS SQL Instance. While there could be several SQL instances only one SQL instance is uniquely associated with a TFS instance. This relationship is established separately and is manifested either in the Health Explorer or the Diagram View.

Element properties:

TargetMicrosoft.SQLServer.2005.DBEngine
EnabledTrue
Frequency900
RemotableFalse

Object Discovery Details:

Discovered Classes and their attribuets:
Discovered relationships and their attribuets:

Member Modules:

ID Module Type TypeId RunAs 
DS DataSource Microsoft.Windows.TimedScript.DiscoveryProvider Default

Source Code:

<Discovery ID="TeamFoundationServer2008.DiscoverTFSDatabaseInstanceRule" Enabled="true" Target="MicrosoftSQLServer2005Discovery!Microsoft.SQLServer.2005.DBEngine" ConfirmDelivery="false" Remotable="true" Priority="Normal">
<Category>Discovery</Category>
<DiscoveryTypes>
<DiscoveryClass TypeID="TeamFoundationServer2008.TFSDatabaseInstance">
<Property TypeID="System!System.Entity" PropertyID="DisplayName"/>
<Property TypeID="MicrosoftSQLServerLibrary!Microsoft.SQLServer.ServerRole" PropertyID="InstanceName"/>
</DiscoveryClass>
<DiscoveryRelationship TypeID="TeamFoundationServer2008.TFSATtoTFSDBInstance"/>
</DiscoveryTypes>
<DataSource ID="DS" TypeID="Windows!Microsoft.Windows.TimedScript.DiscoveryProvider">
<IntervalSeconds>900</IntervalSeconds>
<SyncTime/>
<ScriptName>TFDBInst.vbs</ScriptName>
<Arguments>$MPElement$ $Target/Id$ $Target/Host/Property[Type="Windows!Microsoft.Windows.Computer"]/PrincipalName$ $Target/Property[Type="MicrosoftSQLServerLibrary!Microsoft.SQLServer.ServerRole"]/InstanceName$</Arguments>
<ScriptBody><Script>Option Explicit

Dim oArgs
Set oArgs = WScript.Arguments
if oArgs.Count &lt; 4 Then
Wscript.Quit -1
End If

Dim oAPI, oDiscoveryData, oInst
Dim SourceID, ManagedEntityId, TargetComputer, vInstanceName, vPrincipalName
Dim DBArrayList(6), DBName

SourceId = oArgs(0)
ManagedEntityId = oArgs(1)
vPrincipalName = oArgs(2)
vInstanceName = oArgs(3)


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

'# Filter out SQLEXPRESS Instances
IF InStr(vInstanceName,"SQLEXPRESS")=0 THEN
set oInst = oDiscoveryData.CreateClassInstance("$MPElement[Name='TeamFoundationServer2008.TFSDatabaseInstance']$")
call oInst.AddProperty("$MPElement[Name='MicrosoftSQLServerLibrary!Microsoft.SQLServer.ServerRole']/InstanceName$",vInstanceName)
call oInst.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.Computer']/PrincipalName$",vPrincipalName)
call oDiscoveryData.AddInstance(oInst)
ELSE
' Call TraceLogMessage("SQL EXPRESS Instance skipped")
END IF



Call oAPI.Return(oDiscoveryData)
'###### FUNCTION TRACELOGMESSAGE ################
Function TraceLogMessage(ByVal sMessage)
Dim lsEventInformation
WScript.Echo sMessage

' Retrieve the name of this (running) script
Dim FSO, ScriptFileName
Set FSO = CreateObject("Scripting.FileSystemObject")
ScriptFileName = FSO.GetFile(WScript.ScriptFullName).Name
Set FSO = Nothing

On Error Resume Next
Dim oAPITemp
Set oAPITemp = CreateObject("MOM.ScriptAPI")
lsEventInformation = 3
oAPITemp.LogScriptEvent ScriptFileName, 4000, lsEventInformation, sMessage
On Error Goto 0
End Function


</Script></ScriptBody>
<TimeoutSeconds>360</TimeoutSeconds>
</DataSource>
</Discovery>