Dell CMC Discovery Data Source

Dell.ChassisModularServer.Correlation.Discovery.DataSource (DataSourceModuleType)

Data source for Dell Chassis-Modular Server correlation discovery

Element properties:

TypeDataSourceModuleType
IsolationAny
AccessibilityInternal
RunAsDefault
OutputTypeSystem.Discovery.Data

Member Modules:

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

Overrideable Parameters:

IDParameterTypeSelectorDisplay NameDescription
IntervalSecondsint$Config/IntervalSeconds$Interval SecondsSchedule Interval (in Seconds)
TimeoutSecondsint$Config/TimeoutSeconds$Timeout SecondsScript Timeout (in Seconds)
LogLevelint$Config/LogLevel$Log LevelLog Level

Source Code:

<DataSourceModuleType ID="Dell.ChassisModularServer.Correlation.Discovery.DataSource" Accessibility="Internal" Batching="false">
<Configuration>
<IncludeSchemaTypes>
<SchemaType>Windows!Microsoft.Windows.PowerShellSchema</SchemaType>
</IncludeSchemaTypes>
<xsd:element minOccurs="1" name="ChassisType" type="xsd:int"/>
<xsd:element minOccurs="1" name="ChassisManagementIP" type="xsd:string"/>
<xsd:element minOccurs="1" name="ChassisManagementDeviceKey" type="xsd:string"/>
<xsd:element minOccurs="1" name="PrincipalName" type="xsd:string"/>
<xsd:element minOccurs="1" name="Uid" type="xsd:string"/>
<xsd:element minOccurs="1" name="IntervalSeconds" type="xsd:int"/>
<xsd:element minOccurs="1" name="TimeoutSeconds" type="xsd:int"/>
<xsd:element minOccurs="1" name="LogLevel" type="xsd:int"/>
</Configuration>
<OverrideableParameters>
<OverrideableParameter ID="IntervalSeconds" Selector="$Config/IntervalSeconds$" ParameterType="int"/>
<OverrideableParameter ID="TimeoutSeconds" Selector="$Config/TimeoutSeconds$" ParameterType="int"/>
<OverrideableParameter ID="LogLevel" Selector="$Config/LogLevel$" ParameterType="int"/>
</OverrideableParameters>
<ModuleImplementation Isolation="Any">
<Composite>
<MemberModules>
<DataSource ID="DS" TypeID="Windows!Microsoft.Windows.TimedPowerShell.DiscoveryProvider">
<IntervalSeconds>$Config/IntervalSeconds$</IntervalSeconds>
<SyncTime/>
<ScriptName>DellChassisBladeCorrelation.ps1</ScriptName>
<ScriptBody><Script>
# ------------------------------------------------- #
# Script : Management Server Connection Script #
# Author: Vaideeswaran Ganesan #
# (c) Copyright &#xA9; 2009&#x2013; 2017 Dell Inc, or its subsidiaries. All Rights Reserved #
# ------------------------------------------------- #

param($sourceID, $managedEntityID, $chassisIP, $chassisDK, $principalName, $uid, $chassisType, $logLevel, $logDirectory)
$MSComputerName = (hostname)
$methodtype = 'Discovery'
$DebugScript = $false

Function Write-Info
{
param ([string] $msg)
Write-Host $msg
}
Function Write-WarningInfo
{
param ([string] $msg)
#Write-Host $msg
}
Function Write-ErrorInfo
{
param ([string] $msg)
#Write-Host $msg
}



# Logging Header
If ($logLevel -ne 0)
{
$LogLocation =[environment]::GetEnvironMentVariable("temp","machine") + "\" + $logDirectory + "\"
If(!(Test-Path -path($LogLocation)))
{
# create the directory if not present
New-Item $LogLocation -type directory
}
$Global:LogFileLocation = $LogLocation + "Dell_CBC_" + $chassisIP + ".log"
If(!(Test-Path -path($LogFileLocation)))
{
# create the file if it does not exist
New-Item $LogFileLocation -type file
}
Else
{
$logFileSize = Get-ChildItem $LogFileLocation | ForEach-Object {($_.Length/1KB)}
If ($logFileSize -gt 512)
{
# existingLogFile is greater than 512 KB
$archiveTime = Get-Date -f "yyyy-MM-dd_HH.mm"
Rename-Item $LogFileLocation ("ArchivedLog_IPAddress_" + $chassisIP + "_" + $archiveTime + ".log")
New-Item $LogFileLocation -type file
}
}
}

$scom2012intf = new-module {

[object]$connection = $null
[string] $state = ''
[string] $loglocation = '.\test.log'
[int] $loglevel = 1
[string] $product = "SCOM 2012"

Function Write-Info
{
param ([string] $msg)
#Write-Host $msg
}

Function psDebugLog
{
param($level, $message)
if (($level -gt 0) -and ($level -le $logLevel))
{
$currentTime = Get-Date -f "yyyy-MM-dd_HH.mm.ss"
Out-File -FilePath $this.loglocation -InputObject ($currentTime + " :: " + $message) -Append
}
}

Function GetConnection()
{
psDebugLog -level 1 -message $this.state

$managementServerName = ""
$persistConnection = $false
$interactive = $false
$MachineRegErrorMsg = "Can not find Operations Manager Management Server name for the local machine.";
$UserRegKeyPath = "HKCU:\software\Microsoft\Microsoft Operations Manager\3.0\User Settings";
$MachineRegKeyPath = "HKLM:\software\Microsoft\Microsoft Operations Manager\3.0\Machine Settings";
$UserRegValueName = "SDKServiceMachine";
$MachineRegValueName = "DefaultSDKServiceMachine";
$ConnectingMsg = "Connecting to Operations Manager Management Server '{0}'.";
$ConnectErrorMsg = "Can not connect to Operations Manager Management Server '{0}'.";
$AccessDeniedErrorMsg = "Access is denied to Operations Manager Management Server '{0}'.";
$ConnectPromptMsg = "Enter the name of the Operations Manager Management Server to connect to.";
$ConnectPrompt = "Management Server";
$serviceNotRunningErrorMsg = "The Data Access service is either not running or not yet initialized. Check the event log for more information.";
$HostNotFoundErrorMsg = "No such host is known";

$regKey = $null;
$regValue = $null;

# Set the initial server value to the MS argument.
# If the argument is empty the normal registry lookup sequence will kickin.
# If the argument is not empty the user will be connected to the specified connection.
$server = $managementServerName;
$drive = $null;

# Get the User Operations Manager Product Registry Key
if ($server -eq $null -or $server.Length -eq 0)
{
$regValue = Get-ItemProperty -path:$UserRegKeyPath -name:$UserRegValueName -ErrorAction:SilentlyContinue;

if ($regValue -ne $null)
{
$server = $regValue.SDKServiceMachine;
}
}

if ($server -eq $null -or $server.Length -eq 0)
{
# Get the Machine Operations Manager Product Registry Key if the user setting could not be found.
$regValue = Get-ItemProperty -path:$MachineRegKeyPath -name:$MachineRegValueName -ErrorAction:SilentlyContinue;

if ($regValue -ne $null)
{
$server = $regValue.DefaultSDKServiceMachine;
}
}

# If the default Operations Manager Management Server name can not be found in the registry then default to 'localhost'.
if ($server -eq $null -or $server.Length -eq 0)
{
psDebugLog -level 1 -message $MachineRegErrorMsg
$server = "localhost";
}

# Create a connection and make it the current location.
$this.connection = $null;

if ($server -ne $null -and $server.Length -gt 0)
{
# Format the connecting message.
$msg = $ConnectingMsg -f $server;
psDebugLog -level 1 -message $msg

# Create the new connection.
$this.connection = New-SCOMManagementGroupConnection -ComputerName: $server -PassThru -ErrorAction:Stop
}
$this.state = 'connected'
return $this.connection
}

Function PrintDebug()
{
Write-Info -msg ("Product: " + $this.Product)
Write-Info -msg ("State: " + $this.State)
}

Function LoadSnapins()
{
Import-Module OperationsManager
$this.state = 'snapins loaded'
}

Function GetManagementPacks()
{
psDebugLog -level 1 -message $this.state
return (Get-SCManagementPack)
}

Function InstallManagementPack($ImportPath)
{
Import-SCManagementPack $ImportPath -ErrorAction:SilentlyContinue -ErrorVariable v
return $v
}

Function UninstallManagementPack($ManagementPack)
{
Remove-SCManagementPack -ManagementPack $ManagementPack -ErrorAction:SilentlyContinue -ErrorVariable v
return $v
}

Function GetClassDetails($className)
{
return (Get-SCOMClass | where { $_.Name -eq $className })
}

Function GetMonitoringProperty($refObject, $attribute)
{
$retValue = $null
$temp = $null
$property = $refObject.GetProperties() | where { $_.Name -eq $attribute }
if($property -ne $null)
{
if($refObject.TryGetProperty($property, [ref] $temp))
{
$retValue = $temp
}
}
$retValue

}

Function GetAllMonitoringObjectsOfAClass($class)
{
Get-SCOMClassInstance -class $class
}

Function GetRelatedObjects($cmcObject)
{
$slots = Get-SCRelationshipInstance -SourceInstance $cmcObject
return $slots
}


Function GetMonitoringObjectWithCriteria()
{

}

Function IsAChildObject($object, $chassisSlotSummaryClass)
{
return ( ($object.TargetObject -ne $null) -and
($object.TargetObject.ManagementPackClassIds -ne $null) -and
($object.TargetObject.ManagementPackClassIds.Contains($chassisSlotSummaryClass.Id)) );
}

Function GetTargetObjectInRelationship($object)
{
return ($object.TargetObject)
}

Function GetSourceObjectInRelationship($object)
{
return ($object.SourceObject)
}

Export-ModuleMember -Function * -variable *
} -asCustomObject


$MachineRegKeyPath = "HKLM:\software\Microsoft\Microsoft Operations Manager\3.0\Setup";
$MachineRegValueName = "SKU";
$skuName = $null; $skuVersion = $null
$skuName = Get-ItemProperty -path:$MachineRegKeyPath -name:$MachineRegValueName -ErrorAction:SilentlyContinue;
$skuVersion = Get-ItemProperty -path:$MachineRegKeyPath -name:"CurrentVersion" -ErrorAction:SilentlyContinue;
Write-Info -msg ("SKU: " + $skuName.SKU)
Write-Info -msg ("CurrentVersion: " + $skuVersion.CurrentVersion)
$scomenv = $scom2012intf

# -----------------------------------------------------------------------
# includes timestamp, msg and supports archiving over 512 KB
# ------------------------------------------------------------------------
Function psDebugLog
{
param($level, $message)
if (($level -gt 0) -and ($level -le $logLevel))
{
$currentTime = Get-Date -f "yyyy-MM-dd_HH.mm.ss"
Out-File -FilePath $LogFileLocation -InputObject ($currentTime + " :: " + $message) -Append
}
Write-Info -msg $message
}

psDebugLog 1 "----------------------------------------------"
psDebugLog 1 "Begin of Correlation Discovery script "
psDebugLog 1 ("InputParameters:: ChassisType=" + $chassisType + ", chassisIP=" + $chassisIP + ", Logging=" + $logLevel)
psDebugLog 1 ("ComputerName : " + $MSComputerName)
psDebugLog 1 ("ManagedEntityId : " + $managedEntityID)
psDebugLog 1 ("sourceID : " + $sourceID)
psDebugLog 1 ("ChassisDeviceKey : " + $chassisDK)
psDebugLog 1 ("IPAddress : " + $chassisIP)


# ------------------------------------------------------------------------
# EnumerateDellServers : Creates a BookObject of DellServers, ServiceTags
# ------------------------------------------------------------------------
Function EnumerateDellServers
{
$srvcls = $scomEnv.GetClassDetails('Dell.WindowsServer.ModularBlade')
psDebugLog 1 "-- Enumerating DellServersFunction : "
$winserver = $null

$srvMap = @{}
$ServerDetailBookList = @()

$scomEnv.GetAllMonitoringObjectsOfAClass($srvcls) | foreach -process {
$srvobj = $_
$svc2 = $scomEnv.GetMonitoringProperty($srvobj, 'ServiceTag')
# Do not store any Servers which have ServiceTag empty or Not Available
if (($svc2.Value -ne $null) -and ($svc2.Value -ne "Not Available"))
{
$detailBook = NewServerDetailBookEntry -strServerName $_.Name -strServerServiceTag $svc2.Value
$srvMap += @{ $_.Name = $detailBook }
$ServerDetailBookList += $detailBook
psDebugLog 1 ("Added to ServerDetailBookList : " + $_.Name + " &lt;==&gt; " + $svc2.Value)
}
}
$ServerDetailBookList
}

# ------------------------------------------------------------------------
# EnumerateDellOOBServers : Creates a BookObject of DellServers, ServiceTags
# ------------------------------------------------------------------------
Function EnumerateDellOOBServers
{
$srvcls = $scomEnv.GetClassDetails('Dell.Server.ModularBlade')
psDebugLog 1 "-- Enumerating EnumerateDellOOBServers : "
$winserver = $null

$srvMap = @{}
$ServerOOBDetailBookList = @()

$scomEnv.GetAllMonitoringObjectsOfAClass($srvcls) | foreach -process {
$srvobj = $_
$svc2 = $scomEnv.GetMonitoringProperty($srvobj, 'ServiceTag')
# Do not store any Servers which have ServiceTag empty or Not Available
if (($svc2.Value -ne $null) -and ($svc2.Value -ne "Not Available"))
{
$detailBook = NewServerDetailBookEntry -strServerName $_.Name -strServerServiceTag $svc2.Value
$srvMap += @{ $_.Name = $detailBook }
$ServerOOBDetailBookList += $detailBook
psDebugLog 1 ("Added to ServerOOBDetailBookList : " + $_.Name + " &lt;==&gt; " + $svc2.Value)
}
}
$ServerOOBDetailBookList
}

# ------------------------------------------------------------------------
# EnumerateDellOOBSleds : Creates a BookObject of DellOOBSleds, ServiceTags
# ------------------------------------------------------------------------
Function EnumerateDellOOBSleds
{
$srvcls = $scomEnv.GetClassDetails('Dell.Server.Sled.WithoutOS')
psDebugLog 1 "-- Enumerating DellOOBSledServersFunction : "
$winserver = $null

$srvMap = @{}
$ServerSledDetailBookList = @()

$scomEnv.GetAllMonitoringObjectsOfAClass($srvcls) | foreach -process {
$srvobj = $_
$svc2 = $scomEnv.GetMonitoringProperty($srvobj, 'ServiceTag')
# Do not store any Servers which have ServiceTag empty or Not Available
if (($svc2.Value -ne $null) -and ($svc2.Value -ne "Not Available"))
{
$detailBook = NewServerDetailBookEntry -strServerName $_.Name -strServerServiceTag $svc2.Value
$srvMap += @{ $_.Name = $detailBook }
$ServerSledDetailBookList += $detailBook
psDebugLog 1 ("Added to ServerDetailBookList : " + $_.Name + " &lt;==&gt; " + $svc2.Value)
}
}

$ServerSledDetailBookList
}

# ------------------------------------------------------------------------
# EnumerateDellWinServerSleds : Creates a BookObject of DellInBandSleds, ServiceTags
# ------------------------------------------------------------------------
Function EnumerateDellWinServerSleds
{
$srvcls = $scomEnv.GetClassDetails('Dell.WindowsServer.SledServer')
psDebugLog 1 "-- Enumerating DellWinServerSledsFunction : "
$winserver = $null

$srvMap = @{}
$WinServerSledDetailBookList = @()

$scomEnv.GetAllMonitoringObjectsOfAClass($srvcls) | foreach -process {
$srvobj = $_
$svc2 = $scomEnv.GetMonitoringProperty($srvobj, 'ServiceTag')
# Do not store any Servers which have ServiceTag empty or Not Available
if (($svc2.Value -ne $null) -and ($svc2.Value -ne "Not Available"))
{
$detailBook = NewServerDetailBookEntry -strServerName $_.Name -strServerServiceTag $svc2.Value
$srvMap += @{ $_.Name = $detailBook }
$WinServerSledDetailBookList += $detailBook
psDebugLog 1 ("Added to ServerDetailBookList : " + $_.Name + " &lt;==&gt; " + $svc2.Value)
}
}

$WinServerSledDetailBookList
}

# ------------------------------------------------------------------------
# EnumerateDellFMServerSleds : Creates a BookObject of DellFMServer, ServiceTags
# ------------------------------------------------------------------------
Function EnumerateDellFMServerSleds
{
$srvcls = $scomEnv.GetClassDetails('Dell.Server.FMServer')
psDebugLog 1 "-- Enumerating DellFMServerFunction : "
$winserver = $null

$srvMap = @{}
$FMServerDetailBookList = @()

$scomEnv.GetAllMonitoringObjectsOfAClass($srvcls) | foreach -process {
$srvobj = $_
$svc2 = $scomEnv.GetMonitoringProperty($srvobj, 'ServiceTag')
# Do not store any Servers which have ServiceTag empty or Not Available
if (($svc2.Value -ne $null) -and ($svc2.Value -ne "Not Available"))
{
$detailBook = NewServerDetailBookEntry -strServerName $_.Name -strServerServiceTag $svc2.Value
$srvMap += @{ $_.Name = $detailBook }
$FMServerDetailBookList += $detailBook
psDebugLog 1 ("Added to ServerDetailBookList : " + $_.Name + " &lt;==&gt; " + $svc2.Value)
}
}

$FMServerDetailBookList
}

# ------------------------------------------------------------------------
# EnumerateDellManagedServers : Creates a BookObject of DellManagedServers, ServiceTags
# ------------------------------------------------------------------------
Function EnumerateDellManagedServers
{
$srvcls = $scomEnv.GetClassDetails('Dell.ManagedServer.ModularBlade')
psDebugLog 1 "-- Enumerating EnumerateDellManagedServers : "
$winserver = $null

$srvMap = @{}
$ServerManagedDetailBookList = @()

$scomEnv.GetAllMonitoringObjectsOfAClass($srvcls) | foreach -process {
$srvobj = $_
$svc2 = $scomEnv.GetMonitoringProperty($srvobj, 'ServiceTag')
# Do not store any Servers which have ServiceTag empty or Not Available
if (($svc2.Value -ne $null) -and ($svc2.Value -ne "Not Available"))
{
$detailBook = NewServerDetailBookEntry -strServerName $_.Name -strServerServiceTag $svc2.Value
$srvMap += @{ $_.Name = $detailBook }
$ServerManagedDetailBookList += $detailBook
psDebugLog 1 ("Added to ServerManagedDetailBookList : " + $_.Name + " &lt;==&gt; " + $svc2.Value)
}
}
$ServerManagedDetailBookList
}

# ------------------------------------------------------------------------
# EnumerateDellManagedSled : Creates a BookObject of DellManagedSled, ServiceTags
# ------------------------------------------------------------------------
Function EnumerateDellManagedSled
{
$srvcls = $scomEnv.GetClassDetails('Dell.ManagedServer.SledServer')
psDebugLog 1 "-- Enumerating EnumerateDellManagedSled : "
$winserver = $null

$srvMap = @{}
$ServerManagedSledDetailBookList = @()

$scomEnv.GetAllMonitoringObjectsOfAClass($srvcls) | foreach -process {
$srvobj = $_
$svc2 = $scomEnv.GetMonitoringProperty($srvobj, 'ServiceTag')
# Do not store any Servers which have ServiceTag empty or Not Available
if (($svc2.Value -ne $null) -and ($svc2.Value -ne "Not Available"))
{
$detailBook = NewServerDetailBookEntry -strServerName $_.Name -strServerServiceTag $svc2.Value
$srvMap += @{ $_.Name = $detailBook }
$ServerManagedSledDetailBookList += $detailBook
psDebugLog 1 ("Added to ServerManagedSledDetailBookList : " + $_.Name + " &lt;==&gt; " + $svc2.Value)
}
}
$ServerManagedSledDetailBookList
}

Function GetManagementServerName
{
param($svctag, $className)
$srvcls = $scomEnv.GetClassDetails($className)
psDebugLog 1 "-- Fetching ManagementServerName : "

$scomEnv.GetAllMonitoringObjectsOfAClass($srvcls) | foreach -process {

$srvobj = $_
$svc2 = $scomEnv.GetMonitoringProperty($srvobj, 'ServiceTag')
# Do not store any Servers which have ServiceTag empty or Not Available
if ($svc2.Value -eq $svctag)
{
$mgmtServName = $scomEnv.GetMonitoringProperty($srvobj, 'HostedMgmtServer')
psDebugLog 1 ("Management Server Name : " + $mgmtServName.Value)
}
}
return $mgmtServName
}

$scomenv.loglocation = $LogFileLocation
$scomenv.loglevel = $logLevel
$scomenv.LoadSnapins()
$scomenv.PrintDebug()
$scomenv.GetConnection()

# Main logic
$oAPI = new-object -comObject "MOM.ScriptAPI"
$Discovery = $oAPI.CreateDiscoveryData(0, $sourceID, $managedEntityID)

# ------------------------------------------------------------------------
# NewSlotDetailBookEntry : Creates a BookObject of Slots, ServiceTags
# ------------------------------------------------------------------------
Function NewSlotDetailBookEntry
{
Param([String]$strSlotName, [String]$strServiceTag)
$SlotDetailBookEntry = New-Object System.Object
Add-Member -inputObject $SlotDetailBookEntry -memberType NoteProperty -Name "strSlotName" -Value $strSlotName
Add-Member -inputObject $SlotDetailBookEntry -memberType NoteProperty -Name "strServiceTag" -Value $strServiceTag
Return $SlotDetailBookEntry
}

# ------------------------------------------------------------------------
# NewServerDetailBookEntry : Creates a BookObject of Servers, ServiceTags
# ------------------------------------------------------------------------
Function NewServerDetailBookEntry
{
Param([String]$strServerName, [String]$strServerServiceTag)
$ServerDetailBookEntry = New-Object System.Object
Add-Member -inputObject $ServerDetailBookEntry -memberType NoteProperty -Name "strServerName" -Value $strServerName
Add-Member -inputObject $ServerDetailBookEntry -memberType NoteProperty -Name "strServerServiceTag" -Value $strServerServiceTag
Return $ServerDetailBookEntry
}

function GetSlotSummaryObjectAttribute
{
param($chassisSlotSummaryClassName, $fieldName, $allslots)
$returnValue = $null

# Get the name of the class which represents the Chassis Slot Information
$chassisSlotSummaryClass = $scomEnv.GetClassDetails($chassisSlotSummaryClassName)

# Retrieve the object representing the Chassis Slot from the children of the CMC/DRACMC object
$chassisSlotSummaryObject = $allslots | where { $scomEnv.IsAChildObject($_, $chassisSlotSummaryClass) }
if ($chassisSlotSummaryObject -ne $null)
{
# Go through the summary slot object and retrieve the value of the field
# represented by the fieldName. Return this value to caller.
foreach ($summarySlot in $chassisSlotSummaryObject)
{
$fieldValue = $scomEnv.GetMonitoringProperty($scomEnv.GetTargetObjectInRelationship($summarySlot), $fieldName)
if($fieldValue -ne $null)
{
$returnValue = $fieldValue
break
}
}
}

# Return the occupied slot list
$returnValue
}

function IsAnOccupiedSlot
{
# returns whether the slot is an occupied slot or not!
param($slot, $fieldName, $occupiedSlotList)
$retValue = $false
if ($occupiedSlotList -ne $null -and $slot -ne $null -and $scomEnv.GetTargetObjectInRelationship($slot) -ne $null)
{
$fieldValue = $scomEnv.GetMonitoringProperty($scomEnv.GetTargetObjectInRelationship($slot), $fieldName)
$arrayOfSlots = $occupiedSlotList.Value.Split(", ")
if($arrayOfSlots -ne $null)
{
foreach($t in $arrayOfSlots)
{
if($t -eq $fieldValue.Value)
{
$retValue = $true
break;
}
}
}
}
$retValue
}

#CreateRelationSlotToServer: Create a relationship between Slot and Server
function CreateRelationSlotToServer
{
param($scClassName, $scFreeClass, $field)

$TClass = $scomEnv.GetClassDetails($scClassName)
$TObject = $null
$TObjectTemp = $scomEnv.GetAllMonitoringObjectsOfAClass($TClass)
foreach ($cObj in $TObjectTemp)
{
$cmcDKValue = $scomEnv.GetMonitoringProperty($cObj, "DeviceKey")
if( $cmcDKValue.Value -eq $chassisDK)
{
$TObject = $cObj
break
}
}
if ($TObject -eq $null)
{
psDebugLog 1 ("INFO: No object found")
Write-Info -msg "INFO: No object found"
}
$slots = $scomEnv.GetRelatedObjects($TObject)
$occSlots = GetSlotSummaryObjectAttribute -chassisSlotSummaryClassName $scFreeClass -fieldName 'OccupiedSlots' -allslots $slots

$SlotDetailBook = @()
foreach ($s in $slots)
{
$srcObject = $scomEnv.GetSourceObjectInRelationship($s)
if ($srcObject -eq $TObject)
{

if (IsAnOccupiedSlot -slot $s -fieldName $field -occupiedSlotList $occSlots)
{
$slotObject = $scomEnv.GetTargetObjectInRelationship($s)
$svcTag = $scomEnv.GetMonitoringProperty($slotObject, 'ServiceTag' )
if ($svcTag.Value -ne $null -and $svcTag.Value -ne "" )
{
$tag = $svcTag.Value
# Do not store any Slots which have ServiceTag empty or Not Available
if (($tag -ne $null) -and ($tag -ne "Not Available"))
{
$SlotDetailBook += NewSlotDetailBookEntry -strSlotName $slotObject.Name -strServiceTag $tag
psDebugLog 1 ("Added to SlotDetailBook : " + $slotObject.Name + " &lt;==&gt; " + $tag)
}
}
}
}
}
psDebugLog 1 ("SlotDetailBook Count: " + $SlotDetailBook.Count)

# Get list of servers which have these ServiceTags
$ServerDetailBook = @()
$ServerDetailBook = EnumerateDellServers
psDebugLog 1 ("ServerDetailBook Count: " + $ServerDetailBook.Count)

If ($ServerDetailBook -ne $null)
{
ForEach ($slotInstance in $SlotDetailBook)
{
psDebugLog 9 ("Iteration through Loop Slot: " + $slotInstance.strSlotName + "; " + $slotInstance.strServiceTag)
$ServerDetailBookRes = $ServerDetailBook | where {$_.strServerServiceTag -match $slotInstance.strServiceTag }

If ($ServerDetailBookRes -ne $null)
{
Foreach ($serverInstance in $ServerDetailBookRes)
{
if($scClassName -eq 'Dell.ModularChassis.CMC')
{
psDebugLog 9 ("Comparing Slot: " + $slotInstance.strSlotName + " with ServerInstance = " + $serverInstance.strServerServiceTag)
psDebugLog 9 ("Comparing Slot principlename: " + $serverInstance.strServerName)
$Instance1 = $Discovery.CreateClassInstance("$MPElement[Name='DAD!Dell.ModularChassis.CMCSlot']$")
$Instance1.AddProperty("$MPElement[Name='DAD!Dell.ModularChassis.CMCSlot']/PrimarySlot$", $slotInstance.strSlotName)
$Instance1.AddProperty("$MPElement[Name='DAD!Dell.ModularChassis.CMC']/UID$",$uid)
$oRelationship = $Discovery.CreateRelationshipInstance("$MPElement[Name='DellCMCSlot.Contains.DellWinServer']$")
}
else
{
psDebugLog 9 ("Comparing Slot: " + $slotInstance.strSlotName + " with ServerInstance = " + $serverInstance.strServerServiceTag)
psDebugLog 9 ("Comparing Slot servicetag: " + $slotInstance.strServiceTag)
$Instance1 = $Discovery.CreateClassInstance("$MPElement[Name='DAD!Dell.ModularChassis.DRACMCSlot']$")
$Instance1.AddProperty("$MPElement[Name='DAD!Dell.ModularChassis.DRACMCSlot']/OccupiedSlot$", $slotInstance.strSlotName)
$Instance1.AddProperty("$MPElement[Name='DAD!Dell.ModularChassis.DRACMC']/UID$",$uid)
$oRelationship = $Discovery.CreateRelationshipInstance("$MPElement[Name='DellDRACMCSlot.Contains.DellWinServer']$")
}

$Instance1.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.Computer']/PrincipalName$", $principalName)

$Instance2 = $Discovery.CreateClassInstance("$MPElement[Name='DellScalableWindowsServer!Dell.WindowsServer.Server']$")
$Instance2.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.Computer']/PrincipalName$", $serverInstance.strServerName)
$Instance2.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.LogicalDevice']/DeviceID$", $serverInstance.strServerName)
$oRelationship.Source = $Instance1
$oRelationship.Target = $Instance2
$Discovery.AddInstance($oRelationship)
psDebugLog 1 ("Created Containment between Slot:Server =&gt; " + $chassisIP + "(" + $slotInstance.strSlotName + ") : " + $slotInstance.strServiceTag + " : " + $serverInstance.strServerName)
break
}
}
Else
{
psDebugLog 9 ("SlotServiceTag not found within ServerDetailBook ")
}
}
}

# Get list of OOB servers which have these ServiceTags
$ServerOOBDetailBook = @()
$ServerOOBDetailBook = EnumerateDellOOBServers
psDebugLog 1 ("ServerOOBDetailBook Count: " + $ServerOOBDetailBook.Count)

If ($ServerOOBDetailBook -ne $null)
{
ForEach ($slotInstance in $SlotDetailBook)
{
psDebugLog 9 ("Iteration through Loop Slot: " + $slotInstance.strSlotName + "; " + $slotInstance.strServiceTag)
$ServerDetailBookRes = $ServerOOBDetailBook | where {$_.strServerServiceTag -match $slotInstance.strServiceTag }

If ($ServerDetailBookRes -ne $null)
{
Foreach ($serverInstance in $ServerDetailBookRes)
{
if($scClassName -eq 'Dell.ModularChassis.CMC')
{
psDebugLog 9 ("Comparing Slot: " + $slotInstance.strSlotName + " with ServerInstance = " + $serverInstance.strServerServiceTag)
psDebugLog 9 ("Comparing Slot principlename: " + $principalName)
$Instance1 = $Discovery.CreateClassInstance("$MPElement[Name='DAD!Dell.ModularChassis.CMCSlot']$")
$Instance1.AddProperty("$MPElement[Name='DAD!Dell.ModularChassis.CMCSlot']/PrimarySlot$", $slotInstance.strSlotName)
$Instance1.AddProperty("$MPElement[Name='DAD!Dell.ModularChassis.CMC']/UID$",$uid)
$oRelationship = $Discovery.CreateRelationshipInstance("$MPElement[Name='DellCMCSlot.Contains.DellOOBServer']$")
}
else
{
psDebugLog 9 ("Comparing Slot: " + $slotInstance.strSlotName + " with ServerInstance = " + $serverInstance.strServerServiceTag)
psDebugLog 9 ("Comparing Slot servicetag: " + $slotInstance.strServiceTag)
$Instance1 = $Discovery.CreateClassInstance("$MPElement[Name='DAD!Dell.ModularChassis.DRACMCSlot']$")
$Instance1.AddProperty("$MPElement[Name='DAD!Dell.ModularChassis.DRACMCSlot']/OccupiedSlot$", $slotInstance.strSlotName)
$Instance1.AddProperty("$MPElement[Name='DAD!Dell.ModularChassis.DRACMC']/UID$",$uid)
$oRelationship = $Discovery.CreateRelationshipInstance("$MPElement[Name='DellDRACMCSlot.Contains.DellOOBServer']$")
}

$Instance1.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.Computer']/PrincipalName$", $principalName)

$mgServName = GetManagementServerName -svctag $serverInstance.strServerName -className 'Dell.Server.ModularBlade'
$Instance2 = $Discovery.CreateClassInstance("$MPElement[Name='DellModelServer!Dell.Server']$")
$Instance2.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.Computer']/PrincipalName$", $mgServName.Value)
$Instance2.AddProperty("$MPElement[Name='DellModelServer!Dell.Server']/UID$", $serverInstance.strServerName)
$oRelationship.Source = $Instance1
$oRelationship.Target = $Instance2
$Discovery.AddInstance($oRelationship)
psDebugLog 1 ("Uid for OOB server =&gt; " + $serverInstance.strServerName)
psDebugLog 1 ("Created Containment between Slot:Server =&gt; " + $chassisIP + "(" + $slotInstance.strSlotName + ") : " + $slotInstance.strServiceTag + " : " + $serverInstance.strServerName)
break
}
}
Else
{
psDebugLog 9 ("SlotServiceTag not found within ServerOOBDetailBook ")
}
}
}
# Get list of Sled servers which have these ServiceTags
$ServerSledDetailBook = @()
$ServerSledDetailBook = EnumerateDellOOBSleds
psDebugLog 1 ("ServerSledDetailBook Count: " + $ServerSledDetailBook.Count)
If ($ServerSledDetailBook -ne $null)
{
ForEach ($slotInstance in $SlotDetailBook)
{
psDebugLog 9 ("Iteration through Loop Slot: " + $slotInstance.strSlotName + "; " + $slotInstance.strServiceTag)
$ServerDetailBookRes = $ServerSledDetailBook | where {$_.strServerServiceTag -match $slotInstance.strServiceTag }

If ($ServerDetailBookRes -ne $null)
{
Foreach ($serverInstance in $ServerDetailBookRes)
{
if($scClassName -eq 'Dell.ModularChassis.CMC')
{
psDebugLog 9 ("Comparing Slot: " + $slotInstance.strSlotName + " with ServerInstance = " + $serverInstance.strServerServiceTag)
psDebugLog 9 ("Comparing Slot principlename: " + $principalName)
$Instance1 = $Discovery.CreateClassInstance("$MPElement[Name='DAD!Dell.ModularChassis.CMCSlot']$")
$Instance1.AddProperty("$MPElement[Name='DAD!Dell.ModularChassis.CMCSlot']/PrimarySlot$", $slotInstance.strSlotName)
$Instance1.AddProperty("$MPElement[Name='DAD!Dell.ModularChassis.CMC']/UID$",$uid)
$oRelationship = $Discovery.CreateRelationshipInstance("$MPElement[Name='DellCMCSlot.Contains.DellOOBSled']$")
$Instance1.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.Computer']/PrincipalName$", $principalName)

$mgServName = GetManagementServerName -svctag $serverInstance.strServerName -className 'Dell.Server.Sled.WithoutOS'
$Instance2 = $Discovery.CreateClassInstance("$MPElement[Name='DellModelServer!Dell.Server.Sled.WithoutOS']$")
$Instance2.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.Computer']/PrincipalName$", $mgServName.Value)
$Instance2.AddProperty("$MPElement[Name='DellModelServer!Dell.Server']/UID$", $serverInstance.strServerName)
$oRelationship.Source = $Instance1
$oRelationship.Target = $Instance2
$Discovery.AddInstance($oRelationship)
psDebugLog 1 ("Uid for sled server =&gt; " + $serverInstance.strServerName)
psDebugLog 1 ("Created Containment between Slot:Server =&gt; " + $chassisIP + "(" + $slotInstance.strSlotName + ") : " + $slotInstance.strServiceTag + " : " + $serverInstance.strServerName)
break
}
}
}
Else
{
psDebugLog 9 ("SlotServiceTag not found within ServerSledDetailBook ")
}
}

}

# Get list of servers which have these ServiceTags
$WinServerSledDetailBook = @()
$WinServerSledDetailBook = EnumerateDellWinServerSleds
psDebugLog 1 ("WinServerSledDetailBook Count: " + $WinServerSledDetailBook.Count)

If ($WinServerSledDetailBook -ne $null)
{
ForEach ($slotInstance in $SlotDetailBook)
{
psDebugLog 9 ("Iteration through Loop Slot: " + $slotInstance.strSlotName + "; " + $slotInstance.strServiceTag)
$ServerDetailBookRes = $WinServerSledDetailBook | where {$_.strServerServiceTag -match $slotInstance.strServiceTag }

If ($ServerDetailBookRes -ne $null)
{
Foreach ($serverInstance in $ServerDetailBookRes)
{
if($scClassName -eq 'Dell.ModularChassis.CMC')
{
psDebugLog 9 ("Comparing Slot: " + $slotInstance.strSlotName + " with ServerInstance = " + $serverInstance.strServerServiceTag)
psDebugLog 9 ("Comparing Slot principlename: " + $serverInstance.strServerName)
$Instance1 = $Discovery.CreateClassInstance("$MPElement[Name='DAD!Dell.ModularChassis.CMCSlot']$")
$Instance1.AddProperty("$MPElement[Name='DAD!Dell.ModularChassis.CMCSlot']/PrimarySlot$", $slotInstance.strSlotName)
$Instance1.AddProperty("$MPElement[Name='DAD!Dell.ModularChassis.CMC']/UID$",$uid)
$oRelationship = $Discovery.CreateRelationshipInstance("$MPElement[Name='DellCMCSlot.Contains.DellWinServerSled']$")
$Instance1.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.Computer']/PrincipalName$", $principalName)
$Instance2 = $Discovery.CreateClassInstance("$MPElement[Name='DellScalableWindowsServer!Dell.WindowsServer.SledServer']$")
$Instance2.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.Computer']/PrincipalName$", $serverInstance.strServerName)
$Instance2.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.LogicalDevice']/DeviceID$", $serverInstance.strServerName)
$oRelationship.Source = $Instance1
$oRelationship.Target = $Instance2
$Discovery.AddInstance($oRelationship)
psDebugLog 1 ("Created Containment between Slot:Server =&gt; " + $chassisIP + "(" + $slotInstance.strSlotName + ") : " + $slotInstance.strServiceTag + " : " + $serverInstance.strServerName)
break
}
}
}
Else
{
psDebugLog 9 ("SlotServiceTag not found within WinServerSledDetailBook ")
}
}
}
# Get list of FM servers which have these ServiceTags
$FMServerDetailBook = @()
$FMServerDetailBook = EnumerateDellFMServerSleds
psDebugLog 1 ("FMServerDetailBook Count: " + $FMServerDetailBook.Count)
If ($FMServerDetailBook -ne $null)
{
ForEach ($slotInstance in $SlotDetailBook)
{
psDebugLog 9 ("Iteration through Loop Slot: " + $slotInstance.strSlotName + "; " + $slotInstance.strServiceTag)
$ServerDetailBookRes = $FMServerDetailBook | where {$_.strServerServiceTag -match $slotInstance.strServiceTag }

If ($ServerDetailBookRes -ne $null)
{
Foreach ($serverInstance in $ServerDetailBookRes)
{
if($scClassName -eq 'Dell.ModularChassis.CMC')
{
psDebugLog 9 ("Comparing Slot: " + $slotInstance.strSlotName + " with ServerInstance = " + $serverInstance.strServerServiceTag)
psDebugLog 9 ("Comparing Slot principlename: " + $principalName)
$Instance1 = $Discovery.CreateClassInstance("$MPElement[Name='DAD!Dell.ModularChassis.CMCSlot']$")
$Instance1.AddProperty("$MPElement[Name='DAD!Dell.ModularChassis.CMCSlot']/PrimarySlot$", $slotInstance.strSlotName)
$Instance1.AddProperty("$MPElement[Name='DAD!Dell.ModularChassis.CMC']/UID$",$uid)
$oRelationship = $Discovery.CreateRelationshipInstance("$MPElement[Name='DellCMCSlot.Contains.DellFMServer']$")
$Instance1.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.Computer']/PrincipalName$", $principalName)
$mgServName = GetManagementServerName -svctag $serverInstance.strServerName -className 'Dell.Server.FMServer'
$Instance2 = $Discovery.CreateClassInstance("$MPElement[Name='DellModelServer!Dell.Server.FMServer']$")
$Instance2.AddProperty("$MPElement[Name='DellModelServer!Dell.Server.FMServer']/ServiceTag$", $serverInstance.strServerName)
$oRelationship.Source = $Instance1
$oRelationship.Target = $Instance2
$Discovery.AddInstance($oRelationship)
psDebugLog 1 ("Uid for sled server =&gt; " + $serverInstance.strServerName)
psDebugLog 1 ("Created Containment between Slot:Server =&gt; " + $chassisIP + "(" + $slotInstance.strSlotName + ") : " + $slotInstance.strServiceTag + " : " + $serverInstance.strServerName)
break
}
}
}
Else
{
psDebugLog 9 ("SlotServiceTag not found within FMServerDetailBook ")
}
}

}

# Get list of Managed servers which have these ServiceTags
$ServerManagedDetailBook = @()
$ServerManagedDetailBook = EnumerateDellManagedServers
psDebugLog 1 ("ServerManagedDetailBook Count: " + $ServerManagedDetailBook.Count)

If ($ServerManagedDetailBook -ne $null)
{
ForEach ($slotInstance in $SlotDetailBook)
{
psDebugLog 9 ("Iteration through Loop Slot: " + $slotInstance.strSlotName + "; " + $slotInstance.strServiceTag)
$ServerDetailBookRes = $ServerManagedDetailBook | where {$_.strServerServiceTag -match $slotInstance.strServiceTag }

If ($ServerDetailBookRes -ne $null)
{
Foreach ($serverInstance in $ServerDetailBookRes)
{
if($scClassName -eq 'Dell.ModularChassis.CMC')
{
psDebugLog 9 ("Comparing Slot: " + $slotInstance.strSlotName + " with ServerInstance = " + $serverInstance.strServerServiceTag)
psDebugLog 9 ("Comparing Slot principlename: " + $principalName)
$Instance1 = $Discovery.CreateClassInstance("$MPElement[Name='DAD!Dell.ModularChassis.CMCSlot']$")
$Instance1.AddProperty("$MPElement[Name='DAD!Dell.ModularChassis.CMCSlot']/PrimarySlot$", $slotInstance.strSlotName)
$Instance1.AddProperty("$MPElement[Name='DAD!Dell.ModularChassis.CMC']/UID$",$uid)
$oRelationship = $Discovery.CreateRelationshipInstance("$MPElement[Name='DellCMCSlot.Contains.DellManagedServer']$")
}
else
{
psDebugLog 9 ("Comparing Slot: " + $slotInstance.strSlotName + " with ServerInstance = " + $serverInstance.strServerServiceTag)
psDebugLog 9 ("Comparing Slot servicetag: " + $slotInstance.strServiceTag)
$Instance1 = $Discovery.CreateClassInstance("$MPElement[Name='DAD!Dell.ModularChassis.DRACMCSlot']$")
$Instance1.AddProperty("$MPElement[Name='DAD!Dell.ModularChassis.DRACMCSlot']/OccupiedSlot$", $slotInstance.strSlotName)
$Instance1.AddProperty("$MPElement[Name='DAD!Dell.ModularChassis.DRACMC']/UID$",$uid)
$oRelationship = $Discovery.CreateRelationshipInstance("$MPElement[Name='DellDRACMCSlot.Contains.DellManagedServer']$")
}

$Instance1.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.Computer']/PrincipalName$", $principalName)

$mgServName = GetManagementServerName -svctag $serverInstance.strServerName -className 'Dell.ManagedServer.ModularBlade'
$Instance2 = $Discovery.CreateClassInstance("$MPElement[Name='DellMangedServerModel!Dell.ManagedServer']$")
#$Instance2.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.Computer']/PrincipalName$", $mgServName.Value)
$Instance2.AddProperty("$MPElement[Name='DellMangedServerModel!Dell.ManagedServer']/UID$", $serverInstance.strServerName)
$oRelationship.Source = $Instance1
$oRelationship.Target = $Instance2
$Discovery.AddInstance($oRelationship)
psDebugLog 1 ("Uid for Managed server =&gt; " + $serverInstance.strServerName)
psDebugLog 1 ("Created Containment between Slot:ManagedServer =&gt; " + $chassisIP + "(" + $slotInstance.strSlotName + ") : " + $slotInstance.strServiceTag + " : " + $serverInstance.strServerName)
break
}
}
Else
{
psDebugLog 9 ("SlotServiceTag not found within ServerManagedDetailBook ")
}
}
}

# Get list of Managed Sled servers which have these ServiceTags
$ServerManagedSledDetailBook = @()
$ServerManagedSledDetailBook = EnumerateDellManagedSled
psDebugLog 1 ("ServerManagedSledDetailBook Count: " + $ServerManagedSledDetailBook.Count)

If ($ServerManagedSledDetailBook -ne $null)
{
ForEach ($slotInstance in $SlotDetailBook)
{
psDebugLog 9 ("Iteration through Loop Slot: " + $slotInstance.strSlotName + "; " + $slotInstance.strServiceTag)
$ServerDetailBookRes = $ServerManagedSledDetailBook | where {$_.strServerServiceTag -match $slotInstance.strServiceTag }

If ($ServerDetailBookRes -ne $null)
{
Foreach ($serverInstance in $ServerDetailBookRes)
{
if($scClassName -eq 'Dell.ModularChassis.CMC')
{
psDebugLog 9 ("Comparing Slot: " + $slotInstance.strSlotName + " with ServerInstance = " + $serverInstance.strServerServiceTag)
psDebugLog 9 ("Comparing Slot principlename: " + $principalName)
$Instance1 = $Discovery.CreateClassInstance("$MPElement[Name='DAD!Dell.ModularChassis.CMCSlot']$")
$Instance1.AddProperty("$MPElement[Name='DAD!Dell.ModularChassis.CMCSlot']/PrimarySlot$", $slotInstance.strSlotName)
$Instance1.AddProperty("$MPElement[Name='DAD!Dell.ModularChassis.CMC']/UID$",$uid)
$oRelationship = $Discovery.CreateRelationshipInstance("$MPElement[Name='DellCMCSlot.Contains.DellManagedServerSled']$")
$Instance1.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.Computer']/PrincipalName$", $principalName)

$mgServName = GetManagementServerName -svctag $serverInstance.strServerName -className 'Dell.ManagedServer.SledServer'
$Instance2 = $Discovery.CreateClassInstance("$MPElement[Name='DellMangedServerModel!Dell.ManagedServer.SledServer']$")
#$Instance2.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.Computer']/PrincipalName$", $mgServName.Value)
$Instance2.AddProperty("$MPElement[Name='DellMangedServerModel!Dell.ManagedServer']/UID$", $serverInstance.strServerName)
$oRelationship.Source = $Instance1
$oRelationship.Target = $Instance2
$Discovery.AddInstance($oRelationship)
psDebugLog 1 ("Uid for sled server =&gt; " + $serverInstance.strServerName)
psDebugLog 1 ("Created Containment between Slot:Server =&gt; " + $chassisIP + "(" + $slotInstance.strSlotName + ") : " + $slotInstance.strServiceTag + " : " + $serverInstance.strServerName)
break
}
}
}
Else
{
psDebugLog 9 ("SlotServiceTag not found within ServerManagedSledDetailBook ")
}
}
}
}

# Main logic
If ($scomEnv.connection -eq $null)
{
psDebugLog 1 ("Unable to get connection to OpsMgr. Correlation not performed!")
}
ElseIf ($chassisType -eq 2)
{
psDebugLog 1 "ChassisType = Dell.ModularChassis.CMC "
CreateRelationSlotToServer -scClassName "Dell.ModularChassis.CMC" -scFreeClass "Dell.ModularChassis.CMCFreeSlotObj" -field 'PrimarySlot'
}
ElseIf ($chassisType -eq 1)
{
psDebugLog 1 "ChassisType = Dell.ModularChassis.DRACMC "
CreateRelationSlotToServer -scClassName "Dell.ModularChassis.DRACMC" -scFreeClass "Dell.ModularChassis.DRACMCFreeSlotObj" -field 'OccupiedSlot'
}
Else
{
psDebugLog 1 ("Unknown Chassis Type: " + $chassisType)
}

# Return the discovery data by calling the variable
$Discovery

psDebugLog 1 "End of Correlation Discovery script "
psDebugLog 1 "----------------------------------------------"

</Script></ScriptBody>
<Parameters>
<Parameter>
<Name>sourceID</Name>
<Value>$MPElement$</Value>
</Parameter>
<Parameter>
<Name>managedEntityID</Name>
<Value>$Target/Id$</Value>
</Parameter>
<Parameter>
<Name>chassisIP</Name>
<Value>$Config/ChassisManagementIP$</Value>
</Parameter>
<Parameter>
<Name>chassisDK</Name>
<Value>$Config/ChassisManagementDeviceKey$</Value>
</Parameter>
<Parameter>
<Name>principalName</Name>
<Value>$Config/PrincipalName$</Value>
</Parameter>
<Parameter>
<Name>uid</Name>
<Value>$Config/Uid$</Value>
</Parameter>
<Parameter>
<Name>chassisType</Name>
<Value>$Config/ChassisType$</Value>
</Parameter>
<Parameter>
<Name>logLevel</Name>
<Value>$Config/LogLevel$</Value>
</Parameter>
</Parameters>
<TimeoutSeconds>$Config/TimeoutSeconds$</TimeoutSeconds>
</DataSource>
</MemberModules>
<Composition>
<Node ID="DS"/>
</Composition>
</Composite>
</ModuleImplementation>
<OutputType>System!System.Discovery.Data</OutputType>
</DataSourceModuleType>