PowerShell-based discovery of Unix Application Server

Microsoft.JEE.Windows.TimedPowerShell.UnixAppServer.DiscoveryProvider (DataSourceModuleType)

WS-Management Timed Enumerator Double Filtered, returning DiscoveryData

Element properties:

TypeDataSourceModuleType
IsolationAny
AccessibilityPublic
RunAsDefault
OutputTypeSystem.Discovery.Data

Member Modules:

ID Module Type TypeId RunAs 
Script DataSource Microsoft.Windows.TimedPowerShell.DiscoveryProvider Default

Overrideable Parameters:

IDParameterTypeSelectorDisplay NameDescription
IntervalSecondsint$Config/IntervalSeconds$IntervalThe time value (in seconds) between the calls on the data source.
SyncTimestring$Config/SyncTime$SyncTimeTime of day for the data source to synchronize.
TimeoutSecondsint$Config/TimeoutSeconds$TimeoutThe timeout-value (in seconds) for inactivity on the data source.

Source Code:

<DataSourceModuleType ID="Microsoft.JEE.Windows.TimedPowerShell.UnixAppServer.DiscoveryProvider" Accessibility="Public">
<Configuration>
<IncludeSchemaTypes>
<SchemaType>Windows!Microsoft.Windows.PowerShellSchema</SchemaType>
</IncludeSchemaTypes>
<xsd:element name="IntervalSeconds" type="xsd:int"/>
<xsd:element name="SyncTime" type="xsd:string"/>
<xsd:element name="Parameters" type="NamedParametersType" minOccurs="0" maxOccurs="1"/>
<xsd:element name="TimeoutSeconds" type="xsd:integer"/>
<xsd:element name="StrictErrorHandling" type="xsd:boolean" minOccurs="0" maxOccurs="1"/>
</Configuration>
<OverrideableParameters>
<OverrideableParameter ID="IntervalSeconds" Selector="$Config/IntervalSeconds$" ParameterType="int"/>
<OverrideableParameter ID="SyncTime" Selector="$Config/SyncTime$" ParameterType="string"/>
<OverrideableParameter ID="TimeoutSeconds" Selector="$Config/TimeoutSeconds$" ParameterType="int"/>
</OverrideableParameters>
<ModuleImplementation>
<Composite>
<MemberModules>
<DataSource TypeID="Windows!Microsoft.Windows.TimedPowerShell.DiscoveryProvider" ID="Script">
<IntervalSeconds>$Config/IntervalSeconds$</IntervalSeconds>
<SyncTime>$Config/SyncTime$</SyncTime>
<ScriptName>FindResourcePoolForUnixJeeApplicationServer.ps1</ScriptName>
<ScriptBody><Script>
param($sourceId, $managedEntityId, $classId, $appServerId, $hostName, $httpPort, $httpsPort, $version, $diskPath, $displayName)
$api = New-Object -comObject 'Mom.ScriptAPI'
$discoveryData = $api.CreateDiscoveryData(0, $sourceId, $managedEntityId)

###############################################################################
#
# Duplicate Instance Information
#
$unixInstance = $discoveryData.CreateClassInstance("$classId")

$unixInstance.AddProperty("$MPElement[Name='Microsoft.JEE.ApplicationServer.Instance']/Id$", $appServerId)
$unixInstance.AddProperty("$MPElement[Name='Microsoft.JEE.ApplicationServer.Instance']/HostName$", $hostName)
$unixInstance.AddProperty("$MPElement[Name='Microsoft.JEE.ApplicationServer.Instance']/HttpPort$", $httpPort)
$unixInstance.AddProperty("$MPElement[Name='Microsoft.JEE.ApplicationServer.Instance']/HttpsPort$", $httpsPort)
$unixInstance.AddProperty("$MPElement[Name='Microsoft.JEE.ApplicationServer.Instance']/Version$", $version)
$unixInstance.AddProperty("$MPElement[Name='Microsoft.JEE.ApplicationServer.Instance']/DiskPath$", $diskPath)
$unixInstance.AddProperty("$MPElement[Name='System!System.Entity']/DisplayName$", $displayName)
$discoveryData.AddInstance($unixInstance)

###############################################################################
#
# Determine Resource Pool Guid
#
Import-Module OperationsManager

$Class = get-SCOMClass -name "Microsoft.Unix.Computer"
$Instance = Get-SCOMClassInstance -class $Class | where {$_.Name -eq $hostName}
$Relationship = Get-SCOMRelationship | where {$_.Name -eq "Microsoft.SystemCenter.ManagementActionPointShouldManageEntity"}
$RelationshipID = $Relationship.Id
$RelationshipInstance = Get-SCOMRelationshipInstance -TargetInstance:$Instance | Where {$_.RelationshipId -eq $RelationshipID -and $_.IsDeleted -eq $false}
$ResourcePoolName = $RelationshipInstance.SourceObject.Name

###############################################################################
#
# Create ManagementActionPointShouldManageEntity in order for the generated
# workflows to run on the correct managment server pool (or gateway)
# If the ResourcePoolName does not contain a value (i.e. Singleton of type ManagementServicePool)
# then we assume the machine will belong to the default 'All Management Servers Resource Pool' and
# we do not the ShouldManage relationship. It will default to the 'All Management Servers Resource Pool'.
#
if($ResourcePoolName -ne $null)
{
$oSource = $discoveryData.CreateClassInstance("$MPElement[Name='SC!Microsoft.SystemCenter.ManagementServiceRuntimePool']$")
$oSource.AddProperty("$MPElement[Name='SC!Microsoft.SystemCenter.ManagementServiceRuntimePool']/Name$", $ResourcePoolName)
$oRel = $discoveryData.CreateRelationshipInstance("$MPElement[Name='SC!Microsoft.SystemCenter.ManagementActionPointShouldManageEntity']$")
$oRel.Source = $oSource
$oRel.Target = $unixInstance
$discoveryData.AddInstance($oRel)
}
$discoveryData
</Script></ScriptBody>
<SnapIns/>
<Parameters>$Config/Parameters$</Parameters>
<TimeoutSeconds>$Config/TimeoutSeconds$</TimeoutSeconds>
<StrictErrorHandling>$Config/StrictErrorHandling$</StrictErrorHandling>
</DataSource>
</MemberModules>
<Composition>
<Node ID="Script"/>
</Composition>
</Composite>
</ModuleImplementation>
<OutputType>System!System.Discovery.Data</OutputType>
</DataSourceModuleType>