Microsoft Dynamics CRM Server Discovery

Microsoft.Dynamics.CRM.CrmServerDiscovery (Discovery)

This object discovery discovers all instances of Microsoft Dynamics CRM servers running on Windows Servers.

Knowledge Base article:

Summary

This object discovery discovers all instances of Microsoft Dynamics CRM servers running on Windows Servers. This discovery creates an instance for each Microsoft Dynamics CRM server role. The following Microsoft Dynamics CRM server roles are discovered by this object: Web Application Server, Organization Web Service, Discovery Web Service, Help Server, Asynchronous Processing Service, Sandbox Processing Service, and Deployment Web Service.

This discovery leverages the script Microsoft.Dynamics.Crm.Discovery.vbs to create instances for each server role. If discovery does not find all expected objects, review the System Center Operations Manager event log for errors.

Element properties:

TargetMicrosoft.Dynamics.CRM.Servers
EnabledTrue
Frequency43200
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="Microsoft.Dynamics.CRM.CrmServerDiscovery" Enabled="true" Target="Microsoft.Dynamics.CRM.Servers" ConfirmDelivery="false" Remotable="true" Priority="Normal">
<Category>Discovery</Category>
<DiscoveryTypes>
<DiscoveryClass TypeID="Microsoft.Dynamics.CRM.Asynchronous_Processing_Service_Server">
<Property TypeID="System!System.Entity" PropertyID="DisplayName"/>
</DiscoveryClass>
<DiscoveryClass TypeID="Microsoft.Dynamics.CRM.Deployment_Service_Server">
<Property TypeID="System!System.Entity" PropertyID="DisplayName"/>
</DiscoveryClass>
<DiscoveryClass TypeID="Microsoft.Dynamics.CRM.Discovery_Service_Server">
<Property TypeID="System!System.Entity" PropertyID="DisplayName"/>
</DiscoveryClass>
<DiscoveryClass TypeID="Microsoft.Dynamics.CRM.Help_Servers">
<Property TypeID="System!System.Entity" PropertyID="DisplayName"/>
</DiscoveryClass>
<DiscoveryClass TypeID="Microsoft.Dynamics.CRM.SDK_Servers">
<Property TypeID="System!System.Entity" PropertyID="DisplayName"/>
</DiscoveryClass>
<DiscoveryClass TypeID="Microsoft.Dynamics.CRM.Web_App_Servers">
<Property TypeID="System!System.Entity" PropertyID="DisplayName"/>
</DiscoveryClass>
<DiscoveryClass TypeID="Microsoft.Dynamics.CRM.Sandbox_Service">
<Property TypeID="System!System.Entity" PropertyID="DisplayName"/>
</DiscoveryClass>
<DiscoveryClass TypeID="Microsoft.Dynamics.CRM.Email_Integration_Servers">
<Property TypeID="System!System.Entity" PropertyID="DisplayName"/>
</DiscoveryClass>
<DiscoveryRelationship TypeID="Windows!Microsoft.Windows.ComputerHostsComputerRole"/>
</DiscoveryTypes>
<DataSource ID="DS" TypeID="Windows!Microsoft.Windows.TimedScript.DiscoveryProvider">
<IntervalSeconds>43200</IntervalSeconds>
<SyncTime/>
<ScriptName>Microsoft.Dynamics.CRM.Discovery.vbs</ScriptName>
<Arguments>$MPElement$ $Target/Id$ $Target/Property[Type="System!System.Entity"]/DisplayName$</Arguments>
<ScriptBody><Script>Option Explicit
SetLocale("en-us")
Dim oArgs
Set oArgs = WScript.Arguments
If oArgs.Count &lt; 3 Then
WScript.Quit -1
End If

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

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

Function GetRoles(strKey, oReg)
On Error Resume Next
Dim serverRoles
serverRoles = 0
serverRoles = oReg.RegRead(strKey)
GetRoles = serverRoles
End Function

Sub CreateInstance(strClass, oDiscData, strTarget)
Dim oInstance
set oInstance = oDiscData.CreateClassInstance(strClass)
call oInstance.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.Computer']/PrincipalName$", strTarget)
call oInstance.AddProperty("$MPElement[Name='System!System.Entity']/DisplayName$", strTarget)
call oDiscData.AddInstance(oInstance)
End Sub

Dim strServerRoles, roles, oRegistry
Set oRegistry = CreateObject("WScript.Shell")
strServerRoles = "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSCRM\roles"
roles = GetRoles(strServerRoles, oRegistry)

If roles &lt;&gt; 0 Then
Dim WebApp, Async, Disc, Sdk, Help, DeploySdk, Sandbox, EmailConnector
WebApp = 1
Async = 2
Disc = 8
Sdk = 32768
Help = 262144
DeploySdk = 2097152
Sandbox = 16777216
EmailConnector = 536870912

Dim strWebApp, strAsyncBase, strAsync, strDisc, strSdk, strHelp, strDeploySdk, strIIS, strCommon, strSandbox, strEmailConnector
strWebApp = "$MPElement[Name='Microsoft.Dynamics.CRM.Web_App_Servers']$"
strAsyncBase = "$MPElement[Name='Microsoft.Dynamics.CRM.AsyncService_Servers']$"
strAsync = "$MPElement[Name='Microsoft.Dynamics.CRM.Asynchronous_Processing_Service_Server']$"
strDisc = "$MPElement[Name='Microsoft.Dynamics.CRM.Discovery_Service_Server']$"
strSdk = "$MPElement[Name='Microsoft.Dynamics.CRM.SDK_Servers']$"
strHelp = "$MPElement[Name='Microsoft.Dynamics.CRM.Help_Servers']$"
strDeploySdk = "$MPElement[Name='Microsoft.Dynamics.CRM.Deployment_Service_Server']$"
strIIS = "$MPElement[Name='Microsoft.Dynamics.CRM.IIS_Servers']$"
strCommon = "$MPElement[Name='Microsoft.Dynamics.CRM.Common']$"
strSandbox = "$MPElement[Name='Microsoft.Dynamics.CRM.Sandbox_Service']$"
strEmailConnector = "$MPElement[Name='Microsoft.Dynamics.CRM.Email_Integration_Servers']$"

Dim isIISbasedRole
isIISbasedRole = 0
Dim isAsyncBasedRole
isAsyncBasedRole = 0

If (WebApp And roles) Then
call CreateInstance(strWebApp, oDiscoveryData, TargetComputer)
isIISbasedRole = 1
End If

If (Async And roles) Then
call CreateInstance(strAsync, oDiscoveryData, TargetComputer)
isAsyncBasedRole = 1
End If

If (Disc And roles) Then
call CreateInstance(strDisc, oDiscoveryData, TargetComputer)
isIISbasedRole = 1
End If

If (Sdk And roles) Then
call CreateInstance(strSdk, oDiscoveryData, TargetComputer)
isIISbasedRole = 1
End If

If (Help And roles) Then
call CreateInstance(strHelp, oDiscoveryData, TargetComputer)
isIISbasedRole = 1
End If

If (DeploySdk And roles) Then
call CreateInstance(strDeploySdk, oDiscoveryData, TargetComputer)
isIISbasedRole = 1
End If

If (Sandbox And roles) Then
call CreateInstance(strSandbox, oDiscoveryData, TargetComputer)
End If

If (EmailConnector And roles) Then
call CreateInstance(strEmailConnector, oDiscoveryData, TargetComputer)
isAsyncBasedRole = 1
End If

If (isIISbasedRole = 1) Then
call CreateInstance(strIIS, oDiscoveryData, TargetComputer)
End If

If (isAsyncBasedRole = 1) Then
call CreateInstance(strAsyncBase, oDiscoveryData, TargetComputer)
End If

call CreateInstance(strCommon, oDiscoveryData, TargetComputer)

End If

Call oAPI.Return(oDiscoveryData)</Script></ScriptBody>
<TimeoutSeconds>300</TimeoutSeconds>
</DataSource>
</Discovery>