Microsoft.SystemCenter.ApplicationMonitoring.360.Template.Dashboards.InstancesWidgetScript.ps1 (Resource)

Element properties:

TypeResource
File NameInstancesWidgetScript.ps1
AccessibilityInternal

Source Code:

<Resource ID="Microsoft.SystemCenter.ApplicationMonitoring.360.Template.Dashboards.InstancesWidgetScript.ps1" FileName="InstancesWidgetScript.ps1" Accessibility="Internal"/>

File Content: InstancesWidgetScript.ps1

Param($SelectedComponent)


$id = New-Object Guid($SelectedComponent["Id"].ToString())

# Get the needed classes
$webApplicationComponentClass = Get-SCOMClass -Name Microsoft.SystemCenter.ApplicationMonitoring.Net.WebApplicationComponent
$webServiceComponentClass = Get-SCOMClass -Name Microsoft.SystemCenter.ApplicationMonitoring.Net.AbstractWCFWebServiceComponent

# First, check to see if the passed in selected component is something with instances
$selectedComponentME = Get-SCOMClassInstance -Id $id

# Find the correct hosting relationship based on the class of the selected component
if ($selectedComponentME.IsInstanceOf($webServiceComponentClass))
{
$hostingRelationship = Get-SCOMRelationship -Name Microsoft.SystemCenter.Apm.AbstractWCFWebServiceComponentHostsApmAbstractWCFWebServiceApplicationComponent
$containingRelationship = Get-SCOMRelationship -Name Microsoft.SystemCenter.Apm.IIS2008.WCFWebServiceApplicationComponentContainsApmWebApplicationInstance
}
elseif ($selectedComponentME.IsInstanceOf($webApplicationComponentClass))
{
$hostingRelationship = Get-SCOMRelationship -Name Microsoft.SystemCenter.Apm.WebApplicationComponentHostsApmWebApplicationComponent
$containingRelationship = Get-SCOMRelationship -Name Microsoft.SystemCenter.Apm.AbstractWebApplicationComponentContainsApmWebApplicationInstance
}
else
{
# Only the above 2 classes have 'instances'. Clear the collection and return.
$ScriptContext.ReturnCollection.Clear()
return
}

$templateTypesMO = new-object type[] 1

$templateTypesMO[0] = [Microsoft.EnterpriseManagement.Monitoring.MonitoringObject]

$params = new-object object[] 4

$params[0] = [Guid] $id

$params[1] = [Microsoft.EnterpriseManagement.Configuration.ManagementPackRelationship] $hostingRelationship

$params[2] = [Microsoft.EnterpriseManagement.Common.TraversalDepth]::OneLevel

$params[3] = [Microsoft.EnterpriseManagement.Common.ObjectQueryOptions]::Default

$hostedComponents = $ScriptContext.InvokeGenericMethod($ScriptContext.ManagementGroup.EntityObjects, "GetRelatedObjects", $templateTypesMO, $params)

$newList = @()

foreach ($hostedComponent in $hostedComponents)
{
# Get the contained instances for each component

$templateTypesMO = new-object type[] 1

$templateTypesMO[0] = [Microsoft.EnterpriseManagement.Monitoring.MonitoringObject]

$params = new-object object[] 4

$params[0] = [Guid] $hostedComponent.Id

$params[1] = [Microsoft.EnterpriseManagement.Configuration.ManagementPackRelationship] $containingRelationship

$params[2] = [Microsoft.EnterpriseManagement.Common.TraversalDepth]::OneLevel

$params[3] = [Microsoft.EnterpriseManagement.Common.ObjectQueryOptions]::Default

$containedInstances = $ScriptContext.InvokeGenericMethod($ScriptContext.ManagementGroup.EntityObjects, "GetRelatedObjects", $templateTypesMO, $params)

foreach ($containedInstance in $containedInstances)
{
$instance = $ScriptContext.CreateFromObject($containedInstance, "Id=Id,HealthState=HealthState,DisplayName=DisplayName", $null)

$newList += $instance
}
}

$ScriptContext.ReturnCollection.UpdateCollection($newList)