Helyrendszer szerepköreinek felderítése hálózatfigyelő

Microsoft.SystemCenter2012.ConfigurationManager.SiteSystemRolesDiscoveryProbe (ProbeActionModuleType)

Ez a hálózatfigyelő megkeresi a helyszerepköröket a ConfigMgr-kiszolgálón.

Element properties:

TypeProbeActionModuleType
IsolationAny
AccessibilityPublic
RunAsDefault
InputTypeSystem.BaseData
OutputTypeSystem.Discovery.Data

Member Modules:

ID Module Type TypeId RunAs 
PA ProbeAction Microsoft.SystemCenter2012.ConfigurationManager.ScriptDiscoveryEngine Default

Overrideable Parameters:

IDParameterTypeSelectorDisplay NameDescription
LogLevelint$Config/LogLevel$Naplózási szint (0, 1, 2)

Source Code:

<ProbeActionModuleType ID="Microsoft.SystemCenter2012.ConfigurationManager.SiteSystemRolesDiscoveryProbe" Accessibility="Public" Batching="false" PassThrough="false">
<Configuration>
<xsd:element xmlns:xsd="http://www.w3.org/2001/XMLSchema" minOccurs="1" name="LogLevel" type="xsd:integer"/>
<xsd:element xmlns:xsd="http://www.w3.org/2001/XMLSchema" minOccurs="1" name="Arguments" type="xsd:string"/>
<xsd:element xmlns:xsd="http://www.w3.org/2001/XMLSchema" minOccurs="1" name="TimeoutSeconds" type="xsd:integer"/>
</Configuration>
<OverrideableParameters>
<OverrideableParameter ID="LogLevel" Selector="$Config/LogLevel$" ParameterType="int"/>
</OverrideableParameters>
<ModuleImplementation Isolation="Any">
<Composite>
<MemberModules>
<ProbeAction ID="PA" TypeID="Microsoft.SystemCenter2012.ConfigurationManager.ScriptDiscoveryEngine">
<ScriptName>SiteSystemRolesDiscovery.js</ScriptName>
<LogLevel>$Config/LogLevel$</LogLevel>
<Arguments>$Config/Arguments$</Arguments>
<ScriptBody><Script><!-- $IncludeFileContent/"../../../Scripts/Discovery/SiteSystemRoles.js"$ --><!-- $IncludeFileContent/"../../../Scripts/Discovery/_Return.js"$ -->(function ($, sccm, data) {
// BEGIN Discovery(MEF $, WMI sccm, DiscoveryData data)

var roleClassMap = $("ConfigMgr.RoleClassMap");
var roleDisplayName = $("ConfigMgr.RoleDisplayName");

var numArgs = $.Arguments.Count();

var hierarchyId = sccm.SiteId;
var targetSiteCode = sccm.SiteCode;

var targetServerName = numArgs &gt; 3 ? $.Arguments(3) : undefined;

var siteMap = {};
var currentServerName = "";

// Find Sites
var siteQuery = $.Format(" \
SELECT site.SiteCode, site.Type, site.ReportingSiteCode, site.ServerName, res.ServerRemoteName \n\
FROM SMS_Site as site JOIN SMS_SystemResourceList as res \n\
ON res.SiteCode = site.SiteCode AND res.RoleName ='SMS Site Server'");

sccm.Query(siteQuery, function () {
var site = this["site"];
var res = this["res"];
var siteCode = site.SiteCode;
var siteType = site.Type;
var parentSiteCode = site.ReportingSiteCode;
var serverName = this.ServerName;
var serverFqdn;

if ($.EqualsIgnoreCase(siteCode, sccm.SiteCode)) {
currentServerName = site.ServerName;
serverFqdn = sccm.SiteServer;
}
else {
serverFqdn = res.ServerRemoteName;
}

siteMap[siteCode] =
{
"SiteType": siteType,
"SiteServerFqdn": serverFqdn,
"ParentSiteCode": parentSiteCode
};

});

var targetServerFqdn = targetServerName;
var targetSiteType = siteMap[targetSiteCode].SiteType;
var siteServerFqdn = siteMap[targetSiteCode].SiteServerFqdn;
var parentSiteCode = siteMap[targetSiteCode].ParentSiteCode;
var parentSiteType, parentSiteFqdn;

var serverQuery = "\
SELECT res.ServerRemoteName, res.ServerName, res.SiteCode FROM SMS_SystemResourceList as res \n\
WHERE res.SiteCode IN ( SELECT SiteCode FROM SMS_Site WHERE Status != 4 AND SiteCode = '" + targetSiteCode + "') \n\
AND ServerName = '" + targetServerName + "'\n\
AND res.RoleName ='SMS Site System'";

// Find all servers under the site code sccm.SiteCode
sccm.Query(serverQuery, function () {
// Complete the SiteSystemInfo here instead of in hierarchy.js
var siteSystemDef, serverFqdn;

siteSystemDef = data.CreateClassInstance("$MPElement[Name='Microsoft.SystemCenter2012.ConfigurationManager.SiteSystemInfo']$");
if ($.EqualsIgnoreCase(currentServerName, targetServerName)) {
serverFqdn = (targetSiteCode == sccm.SiteCode) ? sccm.SiteServer : this.ServerRemoteName;
}
else {
serverFqdn = this.ServerRemoteName;
}
targetServerFqdn = $.Trim(serverFqdn, "/\\").toUpperCase();
siteSystemDef.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.Computer']/PrincipalName$", sccm.SiteServer);
siteSystemDef.AddProperty("$MPElement[Name='Microsoft.SystemCenter2012.ConfigurationManager.SiteSystemInfo']/ServerName$", targetServerName);
siteSystemDef.AddProperty("$MPElement[Name='Microsoft.SystemCenter2012.ConfigurationManager.SiteSystemInfo']/ServerRemoteName$", targetServerFqdn);
siteSystemDef.AddProperty("$MPElement[Name='Microsoft.SystemCenter2012.ConfigurationManager.SiteSystemInfo']/SiteCode$", targetSiteCode);
siteSystemDef.AddProperty("$MPElement[Name='Microsoft.SystemCenter2012.ConfigurationManager.SiteSystemInfo']/SiteType$", targetSiteType);
siteSystemDef.AddProperty("$MPElement[Name='Microsoft.SystemCenter2012.ConfigurationManager.SiteSystemInfo']/SiteServerFqdn$", siteServerFqdn);
siteSystemDef.AddProperty("$MPElement[Name='Microsoft.SystemCenter2012.ConfigurationManager.SiteSystemInfo']/HierarchyId$", hierarchyId);

if ($.IsNullOrEmpty(parentSiteCode) == false) {
parentSiteType = siteMap[parentSiteCode].SiteType;
parentSiteFqdn = siteMap[parentSiteCode].SiteServerFqdn;
siteSystemDef.AddProperty("$MPElement[Name='Microsoft.SystemCenter2012.ConfigurationManager.SiteSystemInfo']/ParentSiteCode$", parentSiteCode);
siteSystemDef.AddProperty("$MPElement[Name='Microsoft.SystemCenter2012.ConfigurationManager.SiteSystemInfo']/ParentSiteType$", parentSiteType);
siteSystemDef.AddProperty("$MPElement[Name='Microsoft.SystemCenter2012.ConfigurationManager.SiteSystemInfo']/ParentSiteFqdn$", parentSiteFqdn);
}
else {
parentSiteCode = 0;
siteSystemDef.AddProperty("$MPElement[Name='Microsoft.SystemCenter2012.ConfigurationManager.SiteSystemInfo']/ParentSiteType$", parentSiteCode);
}
data.AddInstance(siteSystemDef);
});


var serverDef, siteDef;
var isSiteServer = false;

var serverQuery = $.Format("\
SELECT res.ServerRemoteName, res.ServerName FROM SMS_SystemResourceList as res \n\
WHERE res.SiteCode ='{0}' AND res.RoleName ='SMS Site Server'", targetSiteCode);

// Add SiteServer &amp; RemoteServers
sccm.Query(serverQuery, function () {
var siteServerName = this.ServerName;

if ($.EqualsIgnoreCase(targetServerName, siteServerName)) {
serverDef = data.CreateClassInstance("$MPElement[Name='SCCM!Microsoft.SystemCenter2012.ConfigurationManager.SiteServer']$");
isSiteServer = true;
}
else {
serverDef = data.CreateClassInstance("$MPElement[Name='SCCM!Microsoft.SystemCenter2012.ConfigurationManager.SiteSystemServer']$");
isSiteServer = false;
}
});

serverDef.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.Computer']/PrincipalName$", targetServerFqdn);
serverDef.AddProperty("$MPElement[Name='System!System.Entity']/DisplayName$", targetServerName);
serverDef.AddProperty("$MPElement[Name='SCCM!Microsoft.SystemCenter2012.ConfigurationManager.Server']/HierarchyId$", hierarchyId);
serverDef.AddProperty("$MPElement[Name='SCCM!Microsoft.SystemCenter2012.ConfigurationManager.Server']/SiteCode$", targetSiteCode);

data.AddInstance(serverDef);

// Add server to hierarchy group
var computer = data.CreateClassInstance("$MPElement[Name='Windows!Microsoft.Windows.Computer']$");
computer.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.Computer']/PrincipalName$", targetServerFqdn);

var group = data.CreateClassInstance("$MPElement[Name='SCCM!Microsoft.SystemCenter2012.ConfigurationManager.HierarchyComputerGroup']$");
group.AddProperty("$MPElement[Name='SCCM!Microsoft.SystemCenter2012.ConfigurationManager.HierarchyComputerGroup']/HierarchyId$", hierarchyId);

data.AddInstance(group);
data.AddInstance(computer);

//relationship = data.CreateRelationshipInstance("$MPElement[Name='SC!Microsoft.SystemCenter.ComputerGroupContainsComputer']$");
//relationship.Source = group;
//relationship.Target = computer;
//data.AddInstance(relationship);

// Create SiteInstance
switch (targetSiteType) {
case 1:
siteDef = data.CreateClassInstance("$MPElement[Name='SCCM!Microsoft.SystemCenter2012.ConfigurationManager.SecondarySite']$");
siteDef.AddProperty("$MPElement[Name='SCCM!Microsoft.SystemCenter2012.ConfigurationManager.Site']/SiteTypeName$", "Secondary Site");
break;
case 2:
siteDef = data.CreateClassInstance("$MPElement[Name='SCCM!Microsoft.SystemCenter2012.ConfigurationManager.PrimarySite']$");
siteDef.AddProperty("$MPElement[Name='SCCM!Microsoft.SystemCenter2012.ConfigurationManager.Site']/SiteTypeName$", "Primary Site");
break;
case 4:
case 8:
siteDef = data.CreateClassInstance("$MPElement[Name='SCCM!Microsoft.SystemCenter2012.ConfigurationManager.CentralSite']$");
siteDef.AddProperty("$MPElement[Name='SCCM!Microsoft.SystemCenter2012.ConfigurationManager.Site']/SiteTypeName$", "Central Site");
break;
}

siteDef.AddProperty("$MPElement[Name='SCCM!Microsoft.SystemCenter2012.ConfigurationManager.Site']/SiteServer$", siteServerFqdn);
siteDef.AddProperty("$MPElement[Name='SCCM!Microsoft.SystemCenter2012.ConfigurationManager.Site']/HierarchyId$", hierarchyId);

relationship = data.CreateRelationshipInstance("$MPElement[Name='SCCM!Microsoft.SystemCenter2012.ConfigurationManager.SiteContainsServers']$");
relationship.Source = siteDef;
relationship.Target = serverDef;

data.AddInstance(siteDef);
data.AddInstance(relationship);

// Child Site Discovery
if (isSiteServer == true) {
relationship = data.CreateRelationshipInstance("$MPElement[Name='SCCM!Microsoft.SystemCenter2012.ConfigurationManager.HierarchyGroupContainsSites']$");
relationship.Source = group;
relationship.Target = siteDef;
data.AddInstance(relationship);

var parentSite, relationship;
switch (parentSiteType) {
case 0:
// no parent
break;
case 2:
// parent is primary
parentSite = data.CreateClassInstance("$MPElement[Name='SCCM!Microsoft.SystemCenter2012.ConfigurationManager.PrimarySite']$");
parentSite.AddProperty("$MPElement[Name='SCCM!Microsoft.SystemCenter2012.ConfigurationManager.Site']/SiteServer$", parentSiteFqdn);

relationship = data.CreateRelationshipInstance("$MPElement[Name='SCCM!Microsoft.SystemCenter2012.ConfigurationManager.PrimarySiteContainsSecondarySite']$")
relationship.Source = parentSite;
relationship.Target = siteDef;
data.AddInstance(parentSite);
data.AddInstance(relationship);
break;
case 4:
case 8:
// parent is central site
parentSite = data.CreateClassInstance("$MPElement[Name='SCCM!Microsoft.SystemCenter2012.ConfigurationManager.CentralSite']$");
parentSite.AddProperty("$MPElement[Name='SCCM!Microsoft.SystemCenter2012.ConfigurationManager.Site']/SiteServer$", parentSiteFqdn);

relationship = data.CreateRelationshipInstance("$MPElement[Name='SCCM!Microsoft.SystemCenter2012.ConfigurationManager.CentralSiteContainsPrimarySite']$")
relationship.Source = parentSite;
relationship.Target = siteDef;
data.AddInstance(parentSite);
data.AddInstance(relationship);
break;
default:
break;
}

// add site component manager
var roleName = "SMS Site Component Manager";
var displayName = roleDisplayName(roleName);
var roleClass = roleClassMap(roleName);

sitecomp = data.CreateClassInstance(roleClass);
sitecomp.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.Computer']/PrincipalName$", targetServerFqdn);
sitecomp.AddProperty("$MPElement[Name='System!System.Entity']/DisplayName$", displayName + " - " + targetServerName);
sitecomp.AddProperty("$MPElement[Name='SCCM!Microsoft.SystemCenter2012.ConfigurationManager.SiteRole']/RoleName$", roleName);
sitecomp.AddProperty("$MPElement[Name='SCCM!Microsoft.SystemCenter2012.ConfigurationManager.SiteRole']/SiteCode$", targetSiteCode);

data.AddInstance(sitecomp);

relationship = data.CreateRelationshipInstance("$MPElement[Name='SCCM!Microsoft.SystemCenter2012.ConfigurationManager.ServersContainsSiteRoles']$")
relationship.Source = serverDef;
relationship.Target = sitecomp;

data.AddInstance(relationship);

switch (targetSiteType) {
case 1:
roleName = "Secondary Site Server";

break;
case 2:
// primary
roleName = "Primary Site Server";
break;
case 4:
case 8:
roleName = "Central Site Server";
break;
default:
roleName = "";
break;
}

displayName = roleDisplayName(roleName);
roleClass = roleClassMap(roleName);

if (roleClass != undefined) {
sitecomp = data.CreateClassInstance(roleClass);
sitecomp.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.Computer']/PrincipalName$", targetServerFqdn);
sitecomp.AddProperty("$MPElement[Name='System!System.Entity']/DisplayName$", displayName + " - " + targetServerName);
sitecomp.AddProperty("$MPElement[Name='SCCM!Microsoft.SystemCenter2012.ConfigurationManager.SiteRole']/RoleName$", roleName);
sitecomp.AddProperty("$MPElement[Name='SCCM!Microsoft.SystemCenter2012.ConfigurationManager.SiteRole']/SiteCode$", targetSiteCode);

data.AddInstance(sitecomp);

relationship = data.CreateRelationshipInstance("$MPElement[Name='SCCM!Microsoft.SystemCenter2012.ConfigurationManager.ServersContainsSiteRoles']$")
relationship.Source = serverDef;
relationship.Target = sitecomp;

data.AddInstance(relationship);
}
}

// Site Roles Discovery
var roleQuery = $.Format("\
SELECT res.RoleName, res.ServerRemoteName, res.ServerName, res.NALPath, cfg.Props, \n\
cfg.FileType, cfg.ItemName, cfg.ItemType, cfg.SiteCode from SMS_SystemResourceList as res \n\
JOIN SMS_SCI_SysResUse as cfg ON cfg.NALPath = res.NALPath and cfg.RoleName = res.RoleName \n\
WHERE res.SiteCode ='{0}' \n\
AND res.RoleName &lt;&gt; 'SMS Site System' \n\
AND res.RoleName &lt;&gt; 'SMS Site Server' \n\
AND res.ServerName = '{1}'", targetSiteCode, targetServerName);

sccm.Query(roleQuery, function () {
var cfg = this["cfg"];
var res = this["res"];
var roleDef, relationship, linkDef, sourceDef, serviceDef;
var roleName = res.RoleName;
var displayName = roleDisplayName(roleName);
var roleClass = roleClassMap(roleName);

if (roleClass != undefined) {
roleDef = data.CreateClassInstance(roleClass);
roleDef.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.Computer']/PrincipalName$", targetServerFqdn);
roleDef.AddProperty("$MPElement[Name='System!System.Entity']/DisplayName$", displayName + " - " + targetServerName);
roleDef.AddProperty("$MPElement[Name='SCCM!Microsoft.SystemCenter2012.ConfigurationManager.SiteRole']/RoleName$", roleName);
roleDef.AddProperty("$MPElement[Name='SCCM!Microsoft.SystemCenter2012.ConfigurationManager.SiteRole']/SiteCode$", targetSiteCode);

if ($.EqualsIgnoreCase(roleName, "SMS SQL Server")) {
var backupServiceName = "SMS_SITE_SQL_BACKUP";

if (isSiteServer == false) {
backupServiceName += "_" + siteServerFqdn;
}

roleDef.AddProperty("$MPElement[Name='SCCM!Microsoft.SystemCenter2012.ConfigurationManager.SqlServer']/BackupServiceName$", backupServiceName);
}

data.AddInstance(roleDef);

relationship = data.CreateRelationshipInstance("$MPElement[Name='SCCM!Microsoft.SystemCenter2012.ConfigurationManager.ServersContainsSiteRoles']$")
relationship.Source = serverDef;
relationship.Target = roleDef;

data.AddInstance(relationship);
}

// Management Point
if ($.EqualsIgnoreCase(roleName, "SMS Management Point")) {
relationship = data.CreateRelationshipInstance("$MPElement[Name='SCCM!Microsoft.SystemCenter2012.ConfigurationManager.SiteContainsManagementPoints']$")
relationship.Source = siteDef;
relationship.Target = roleDef;

data.AddInstance(relationship);


roleDef = data.CreateClassInstance("$MPElement[Name='SCCM!Microsoft.SystemCenter2012.ConfigurationManager.BGBServer']$");
roleDef.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.Computer']/PrincipalName$", targetServerFqdn);
roleDef.AddProperty("$MPElement[Name='System!System.Entity']/DisplayName$", "ConfigMgr Notification Server" + " - " + targetServerName);
roleDef.AddProperty("$MPElement[Name='SCCM!Microsoft.SystemCenter2012.ConfigurationManager.SiteRole']/RoleName$", "BGB Server");
roleDef.AddProperty("$MPElement[Name='SCCM!Microsoft.SystemCenter2012.ConfigurationManager.SiteRole']/SiteCode$", targetSiteCode);
data.AddInstance(roleDef);

relationship = data.CreateRelationshipInstance("$MPElement[Name='SCCM!Microsoft.SystemCenter2012.ConfigurationManager.ServersContainsSiteRoles']$")
relationship.Source = serverDef;
relationship.Target = roleDef;
data.AddInstance(relationship);

}
// Distribution Point
else if ($.EqualsIgnoreCase(roleName, "SMS Distribution Point")) {
var nalPath = res.NALPath;
var serverFqdn = sccm.ResolveServerFqdn(res.ServerName, res.ServerRemoteName);

// add site contains content distribution
linkDef = data.CreateClassInstance("$MPElement[Name='SCCM!Microsoft.SystemCenter2012.ConfigurationManager.ContentDistribution']$");
linkDef.AddProperty("$MPElement[Name='SCCM!Microsoft.SystemCenter2012.ConfigurationManager.ContentDistribution']/DistributionPoint$", serverFqdn);

data.AddInstance(linkDef);

// site.Add(ContentDistribution)
relationship = data.CreateRelationshipInstance("$MPElement[Name='SCCM!Microsoft.SystemCenter2012.ConfigurationManager.SiteContainsDistributionPoints']$")
relationship.Source = siteDef;
relationship.Target = linkDef;

data.AddInstance(relationship);

// add content distribution from distribution source
sourceDef = data.CreateClassInstance("$MPElement[Name='SCCM!Microsoft.SystemCenter2012.ConfigurationManager.DistributionSource']$");
sourceDef.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.Computer']/PrincipalName$", siteServerFqdn);
sourceDef.AddProperty("$MPElement[Name='SCCM!Microsoft.SystemCenter2012.ConfigurationManager.DistributionSource']/DistributionPoint$", serverFqdn);
sourceDef.AddProperty("$MPElement[Name='SCCM!Microsoft.SystemCenter2012.ConfigurationManager.DistributionSource']/ServerNALPath$", nalPath);

data.AddInstance(sourceDef);

// ContentDistribution.Add(DistributionSource)
relationship = data.CreateRelationshipInstance("$MPElement[Name='SCCM!Microsoft.SystemCenter2012.ConfigurationManager.ContentDistributionFromDistributionSource']$")
relationship.Source = linkDef;
relationship.Target = sourceDef;

data.AddInstance(relationship);

// ContentDistribution.Add(DistributionPoint)
relationship = data.CreateRelationshipInstance("$MPElement[Name='SCCM!Microsoft.SystemCenter2012.ConfigurationManager.ContentDistributionToDistributionPoint']$")
relationship.Source = linkDef;
relationship.Target = roleDef;

data.AddInstance(relationship);

var isPxe = false;

if(cfg["Props"] == null){
cfg.Refresh_();
}

$.ForEach(cfg["Props"].toArray(), function () {
if ($.EqualsIgnoreCase(this.PropertyName, "IsPXE") &amp;&amp;
(this.Value === 1)) {
isPxe = true;
}
});

if (isPxe != false) {
roleName = "SMS PXE Service Point";
displayName = roleDisplayName(roleName);
roleClass = roleClassMap(roleName);

roleDef = data.CreateClassInstance(roleClass);
roleDef.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.Computer']/PrincipalName$", targetServerFqdn);
roleDef.AddProperty("$MPElement[Name='System!System.Entity']/DisplayName$", displayName + " - " + targetServerName);
roleDef.AddProperty("$MPElement[Name='SCCM!Microsoft.SystemCenter2012.ConfigurationManager.SiteRole']/RoleName$", roleName);
roleDef.AddProperty("$MPElement[Name='SCCM!Microsoft.SystemCenter2012.ConfigurationManager.SiteRole']/SiteCode$", targetSiteCode);

data.AddInstance(roleDef);

relationship = data.CreateRelationshipInstance("$MPElement[Name='SCCM!Microsoft.SystemCenter2012.ConfigurationManager.ServersContainsSiteRoles']$")
relationship.Source = serverDef;
relationship.Target = roleDef;

data.AddInstance(relationship);
}
}
// State Migration Point
else if ($.EqualsIgnoreCase(roleName, "SMS State Migration Point")) {
cfg.Refresh_();

var propList = cfg["PropLists"];

$.ForEach(propList.toArray(), function () {
if ($.EqualsIgnoreCase(this.PropertyListName, "Directories")) {
var values = this["Values"];
var driveList = {};

// values looks like
// "Directory=C:\\;MaxClients=100;MinDiskSpace=100;MinDiskSpaceUnit=1;",
// "Directory=D:\\;MaxClients=100;MinDiskSpace=100;MinDiskSpaceUnit=1;"
$.ForEach(values.toArray(), function () {
var drive = this;
var pattern = "Directory="
var left = drive.indexOf(pattern);

if (left &gt;= 0) {
drive = drive.substr(left + pattern.length);
var right = drive.indexOf(";");

if (right &gt; 0) {
drive = drive.substr(0, right);
}

// We only C: D:, no /\
var regEx = new RegExp("^[a-zA-Z]:");

var match = regEx.exec(drive);
if (match == null) {
drive = "";
} else if (match.length &gt; 0) {
drive = match[0].toUpperCase();
} else {
drive = "";
}

if ($.IsNullOrEmpty(drive) == false &amp;&amp;
driveList[drive] === undefined) {
var drvDef = data.CreateClassInstance("$MPElement[Name='SCCM!Microsoft.SystemCenter2012.ConfigurationManager.ContentStorageDrive']$");
drvDef.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.Computer']/PrincipalName$", targetServerFqdn);
drvDef.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.LogicalDevice']/DeviceID$", drive);

data.AddInstance(drvDef);

// to ignore duplicate entries
driveList[drive] = drvDef;

relationship = data.CreateRelationshipInstance("$MPElement[Name='SCCM!Microsoft.SystemCenter2012.ConfigurationManager.SiteRoleContainsContentStorage']$")
relationship.Source = roleDef;
relationship.Target = drvDef;

data.AddInstance(relationship);
}
}
});
}
});
}
});

var componentClassNames = $("ConfigMgr.ComponentClassNames");
var componentDisplayNames = $("ConfigMgr.ComponentDisplayNames");

// List components on this server
var serverQuery = $.Format("\
SELECT comp.MachineName, comp.ComponentName FROM SMS_ComponentSummarizer as comp \n\
WHERE TallyInterval='0001128000100008' \n\
AND comp.MachineName ='{0}'", targetServerName);

// Add SiteServer &amp; RemoteServers
sccm.Query(serverQuery, function () {
var component;
var componentName = this.ComponentName;
var displayName = componentDisplayNames(componentName);
var className = componentClassNames(componentName);

if (className != undefined) {
component = data.CreateClassInstance(className);
component.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.Computer']/PrincipalName$", targetServerFqdn);
component.AddProperty("$MPElement[Name='System!System.Entity']/DisplayName$", displayName + " - " + targetServerName);
component.AddProperty("$MPElement[Name='SCCM!Microsoft.SystemCenter2012.ConfigurationManager.ServerComponent']/Name$", componentName);

data.AddInstance(component);

relationship = data.CreateRelationshipInstance("$MPElement[Name='SCCM!Microsoft.SystemCenter2012.ConfigurationManager.ServersContainsComponents']$")
relationship.Source = serverDef;
relationship.Target = component;

data.AddInstance(relationship);
}
});

// END Discovery(MEF $, WMI sccm, DiscoveryData data)
})($, $("ConfigMgr"), $("DiscoveryData"));


$.Return($("DiscoveryData"));

</Script></ScriptBody>
<TimeoutSeconds>$Config/TimeoutSeconds$</TimeoutSeconds>
</ProbeAction>
</MemberModules>
<Composition>
<Node ID="PA"/>
</Composition>
</Composite>
</ModuleImplementation>
<OutputType>System!System.Discovery.Data</OutputType>
<InputType>System!System.BaseData</InputType>
</ProbeActionModuleType>