SHM Discovery

PowerToolsShm.Discovery.PowerToolsShm.PowerShell (Discovery)

Description for SHM.

Element properties:

TargetPowerToolsShm.SHMHost
EnabledTrue
Frequency1200
RemotableFalse

Object Discovery Details:

Discovered Classes and their attribuets:
Discovered relationships and their attribuets:

Member Modules:

ID Module Type TypeId RunAs 
SHM.Discovery.Classes DataSource Microsoft.Windows.TimedPowerShell.DiscoveryProvider Default

Source Code:

<Discovery ID="PowerToolsShm.Discovery.PowerToolsShm.PowerShell" Target="PowerToolsShm.SHMHost" Enabled="true" ConfirmDelivery="false" Remotable="true" Priority="Normal">
<Category>Discovery</Category>
<DiscoveryTypes>
<DiscoveryClass TypeID="PowerToolsShm.HostBusAdapter"/>
<DiscoveryClass TypeID="PowerToolsShm.PhysicalEnclosure"/>
<DiscoveryClass TypeID="PowerToolsShm.PhysicalDrive"/>
<DiscoveryClass TypeID="PowerToolsShm.EnclosureFan"/>
<DiscoveryClass TypeID="PowerToolsShm.EnclosureTemperatureSensor"/>
<DiscoveryClass TypeID="PowerToolsShm.EnclosureVoltageSensor"/>
<DiscoveryClass TypeID="PowerToolsShm.EnclosureCurrentSensor"/>
<DiscoveryClass TypeID="PowerToolsShm.EnclosureEmm"/>
<DiscoveryClass TypeID="PowerToolsShm.EnclosureDrawer"/>
<DiscoveryClass TypeID="PowerToolsShm.EnclosureDriveSlot"/>
<DiscoveryRelationship TypeID="PowerToolsShm.AdapterToEnclosure"/>
<DiscoveryRelationship TypeID="PowerToolsShm.EnclosureToDriveSlot"/>
<DiscoveryRelationship TypeID="PowerToolsShm.EnclosureToEmm"/>
<DiscoveryRelationship TypeID="PowerToolsShm.EnclosureToFan"/>
<DiscoveryRelationship TypeID="PowerToolsShm.EnclosureToPowerSupply"/>
<DiscoveryRelationship TypeID="PowerToolsShm.DriveSlotToDrive"/>
<DiscoveryRelationship TypeID="PowerToolsShm.DrawerToDrive"/>
<DiscoveryRelationship TypeID="PowerToolsShm.EnclosureToCurrentSensor"/>
<DiscoveryRelationship TypeID="PowerToolsShm.EnclosureToDrawer"/>
<DiscoveryRelationship TypeID="PowerToolsShm.EnclosureToTemperatureSensor"/>
<DiscoveryRelationship TypeID="PowerToolsShm.EnclosureToVoltageSensor"/>
</DiscoveryTypes>
<DataSource ID="SHM.Discovery.Classes" TypeID="Windows!Microsoft.Windows.TimedPowerShell.DiscoveryProvider">
<!-- IntervalSeconds specifies how often we will run the discovery. -->
<IntervalSeconds>1200</IntervalSeconds>
<!-- SyncTime specifies the minutes after the hour to synchronize execution of the discovery. -->
<SyncTime/>
<!-- ScriptName specifies the name of the script. -->
<ScriptName>ShmDiscovery.ps1</ScriptName>
<!-- ScriptBody is the text of the script. In this case, a variable is used to specify the script file in the VSAE project -->
<ScriptBody><Script>param($sourceId,$managedEntityId, $computerName, $restAddress)


$api = new-object -comObject 'MOM.ScriptAPI'
$discoveryData = $api.CreateDiscoveryData(0, $sourceId, $managedEntityId)

$api.LogScriptEvent("SHM Discovery",9955,2,"Started")

$installlocation = get-itemproperty -path "Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Dell, Inc.\Server Hardware Manager" -name Location
$scominstalllocation = $installlocation.Location + "\Dell\ServerHardwareManager\extras\scom"

$dlllocation = $scominstalllocation + "\PowerToolsShm.dll"

try
{
Add-Type -Path $dlllocation
}
catch
{
$api.LogScriptEvent("ErrorAddType",9901,2,$_)
}

# for some reason get enlcosures needed a new obj - plus the new object had to be created out of the loops
try
{
$shmrestObj = New-Object PowerToolsShmDiscovery.ShmRest($restAddress)
$shmrestObj2 = New-Object PowerToolsShmDiscovery.ShmRest($restAddress)
$shmrestObj3 = New-Object PowerToolsShmDiscovery.ShmRest($restAddress)
$shmrestObjEmm = New-Object PowerToolsShmDiscovery.ShmRest($restAddress)
$shmrestObjFans = New-Object PowerToolsShmDiscovery.ShmRest($restAddress)
$shmrestObjVs = New-Object PowerToolsShmDiscovery.ShmRest($restAddress)
$shmrestDrives = New-Object PowerToolsShmDiscovery.ShmRest($restAddress)
}
catch
{
$api.LogScriptEvent("SHM New-Object",9901,2,$_)
}

if ($shmrestObj3 -eq $null)
{
$api.LogScriptEvent("SHM ERROR",9901,1,"Unable to create REST class instance")
}

if ($shmrestObj.TestRestServer() &#x2013;eq $FALSE)
{
$api.LogScriptEvent("SHM Discovery Error",8001,1,"Unable to connect to REST Server")
Exit
}


$drivemap = @{}

$listDrives = $shmrestObj3.GetDrives()
$api.LogScriptEvent("DONE",9988,2,"DriveCount=" + $listDrives.Count)
foreach ($drive in $listDrives)
{
$instanceDrive = $discoveryData.CreateClassInstance("$MPElement[Name='PowerToolsShm.PhysicalDrive']$")
$instanceDrive.AddProperty("$MPElement[Name='PowerToolsShm.PhysicalDrive']/WWID$", $drive.WWID)
$instanceDrive.AddProperty("$MPElement[Name='PowerToolsShm.PhysicalDrive']/FirmwareRevision$", $drive.FirmwareRevision)
$instanceDrive.AddProperty("$MPElement[Name='PowerToolsShm.PhysicalDrive']/SerialNumber$", $drive.SerialNumber)
$instanceDrive.AddProperty("$MPElement[Name='PowerToolsShm.PhysicalDrive']/VendorId$", $drive.VendorId)
$instanceDrive.AddProperty("$MPElement[Name='PowerToolsShm.PhysicalDrive']/ProductId$", $drive.ProductId)
$instanceDrive.AddProperty("$MPElement[Name='PowerToolsShm.PhysicalDrive']/TargetPortWwn$", $drive.TargetPortWwn)
$instanceDrive.AddProperty("$MPElement[Name='PowerToolsShm.PhysicalDrive']/TargetPortWwn2$", $drive.TargetPortWwn2)
$instanceDrive.AddProperty("$MPElement[Name='PowerToolsShm.PhysicalDrive']/Size$", $drive.Size)
$instanceDrive.AddProperty("$MPElement[Name='PowerToolsShm.PhysicalDrive']/OSPath$", $drive.OSPath)
$instanceDrive.AddProperty("$MPElement[Name='PowerToolsShm.PhysicalDrive']/SizeBytes$", $drive.SizeBytes)
$instanceDrive.AddProperty("$MPElement[Name='PowerToolsShm.PhysicalDrive']/PredictedFail$", $drive.PredictedFail)
$instanceDrive.AddProperty("$MPElement[Name='PowerToolsShm.PhysicalDrive']/SupportedDrive$", $drive.SupportedDrive)
$instanceDrive.AddProperty("$MPElement[Name='PowerToolsShm.PhysicalDrive']/Status$", $drive.Status)
$instanceDrive.AddProperty("$MPElement[Name='PowerToolsShm.PhysicalDrive']/ComputerName$", $computerName)
$instanceDrive.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.Computer']/PrincipalName$", $computerName)

$discoveryData.AddInstance($instanceDrive)

#$api.LogScriptEvent("NewDrive",9955,2,"NewDrive=" + $drive.WWID)

$drivemap.add($drive.TargetPortWwn,$instanceDrive)
$drivemap.add($drive.TargetPortWwn2,$instanceDrive)
}


$listAdapters = $shmrestObj.GetAdapters()

$api.LogScriptEvent("DONE",9988,2,"adaptercount=" + $listAdapters.Count)
foreach ($a in $listAdapters)
{
#$a
$instanceAdapter = $discoveryData.CreateClassInstance("$MPElement[Name='PowerToolsShm.HostBusAdapter']$")

$now = Get-Date

$instanceAdapter.AddProperty("$MPElement[Name='System!System.Entity']/DisplayName$", $a.Name)
$instanceAdapter.AddProperty("$MPElement[Name='PowerToolsShm.HostBusAdapter']/ComputerName$", $computerName)
$instanceAdapter.AddProperty("$MPElement[Name='PowerToolsShm.HostBusAdapter']/WWID$", $a.SAS_WWID)
$instanceAdapter.AddProperty("$MPElement[Name='PowerToolsShm.HostBusAdapter']/FirmwareVersion$", $a.FW_Version)
$instanceAdapter.AddProperty("$MPElement[Name='PowerToolsShm.HostBusAdapter']/EFI_BIOS$", $a.EFI_BIOS)
$instanceAdapter.AddProperty("$MPElement[Name='PowerToolsShm.HostBusAdapter']/x86_BIOS$", $a.x86_BIOS)
$instanceAdapter.AddProperty("$MPElement[Name='PowerToolsShm.HostBusAdapter']/LastRefresh$", $now)

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

$currentAdapterWwid = $a.SAS_WWID

$discoveryData.AddInstance($instanceAdapter)

$listenclosures = $shmrestObj2.GetEnclosuresForAdapter($a.SAS_WWID)

foreach ($e in $listenclosures)
{
#$e
$instanceEnclosure = $discoveryData.CreateClassInstance("$MPElement[Name='PowerToolsShm.PhysicalEnclosure']$")

$dn = $e.ProductName + " (" + $e.EnclosureWWID + ")"

$instanceEnclosure.AddProperty("$MPElement[Name='System!System.Entity']/DisplayName$", $dn)
#$instanceEnclosure.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.LogicalDevice']/Name$", $emm.Name)
$instanceEnclosure.AddProperty("$MPElement[Name='PowerToolsShm.PhysicalEnclosure']/WWID$", $e.EnclosureWWID)
$instanceEnclosure.AddProperty("$MPElement[Name='PowerToolsShm.PhysicalEnclosure']/ServiceTag$", $e.ServiceTag)
$instanceEnclosure.AddProperty("$MPElement[Name='PowerToolsShm.PhysicalEnclosure']/OverallStatus$", $e.OverallStatus)
$instanceEnclosure.AddProperty("$MPElement[Name='PowerToolsShm.PhysicalEnclosure']/LastRefresh$", $now)
$instanceEnclosure.AddProperty("$MPElement[Name='PowerToolsShm.PhysicalEnclosure']/ComputerName$", $computerName)
$instanceEnclosure.AddProperty("$MPElement[Name='PowerToolsShm.HostBusAdapter']/WWID$", $a.SAS_WWID)
$instanceEnclosure.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.Computer']/PrincipalName$", $computerName)


$discoveryData.AddInstance($instanceEnclosure)

#driveslots
$listdriveSlots = $shmrestObj3.GetDriveSlotsForEnclosure($e.EnclosureWWID)
foreach ($lds in $listdriveSlots)
{
#$lds
$instanceSlot = $discoveryData.CreateClassInstance("$MPElement[Name='PowerToolsShm.EnclosureDriveSlot']$")

$instanceSlot.AddProperty("$MPElement[Name='System!System.Entity']/DisplayName$", $lds.Name)
$instanceSlot.AddProperty("$MPElement[Name='PowerToolsShm.EnclosureDriveSlot']/Status$", $lds.Status)
$instanceSlot.AddProperty("$MPElement[Name='PowerToolsShm.EnclosureDriveSlot']/EnclosureWWID$", $e.EnclosureWWID)

$instanceSlot.AddProperty("$MPElement[Name='PowerToolsShm.EnclosureDriveSlot']/EnclosureSlot$", $lds.EnclosureSlot)
$instanceSlot.AddProperty("$MPElement[Name='PowerToolsShm.EnclosureDriveSlot']/Drawer$", $lds.Drawer)
$instanceSlot.AddProperty("$MPElement[Name='PowerToolsShm.EnclosureDriveSlot']/DrawerSlot$", $lds.DrawerSlot)
$instanceSlot.AddProperty("$MPElement[Name='PowerToolsShm.EnclosureDriveSlot']/Blinking$", $lds.Blinking)
$instanceSlot.AddProperty("$MPElement[Name='PowerToolsShm.EnclosureDriveSlot']/PoweredOff$", $lds.PoweredOff)
$instanceSlot.AddProperty("$MPElement[Name='PowerToolsShm.EnclosureDriveSlot']/AttachedSASAddress0$", $lds.AttachedSASAddress0)
$instanceSlot.AddProperty("$MPElement[Name='PowerToolsShm.EnclosureDriveSlot']/AttachedSASAddress1$", $lds.AttachedSASAddress1)
$instanceSlot.AddProperty("$MPElement[Name='PowerToolsShm.EnclosureDriveSlot']/ElementIndex$", $lds.EnclosureSlot)
$instanceSlot.AddProperty("$MPElement[Name='PowerToolsShm.PhysicalEnclosure']/WWID$", $e.EnclosureWWID)
$instanceSlot.AddProperty("$MPElement[Name='PowerToolsShm.HostBusAdapter']/WWID$", $a.SAS_WWID)
$instanceSlot.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.Computer']/PrincipalName$", $computerName)

$discoveryData.AddInstance($instanceSlot)

$listDriveSlotDrives = $shmrestDrives.GetDriveForSlot($a.SAS_WWID, $e.EnclosureWWID, $lds.EnclosureSlot)
#$api.LogScriptEvent("test1",9888,2,"count=" + $listDriveSlotDrives.length + ",a=" + $a.SAS_WWID + ",e=" + $e.EnclosureWWID + ",s=" + $lds.EnclosureSlot)
foreach ($dsd in $listDriveSlotDrives)
{
#$api.LogScriptEvent("test1",9999,2,"2this is a test")
if ($drivemap.ContainsKey($dsd.TargetPortWwn))
{
$founddrive = $drivemap.Get_Item($dsd.TargetPortWwn)

$relInstanceDstd = $discoverydata.CreateRelationshipInstance("$MPElement[Name='PowerToolsShm.DriveSlotToDrive']$")
$relInstanceDstd.Source = $instanceSlot
$relInstanceDstd.Target = $founddrive
$discoveryData.AddInstance($relInstanceDstd)
}
}
}

#emms
$listemms = $shmrestObjEmm.GetEmmsForEnclosure($e.EnclosureWWID)
foreach ($emm in $listemms)
{
# $emm

$instanceEmm = $discoveryData.CreateClassInstance("$MPElement[Name='PowerToolsShm.EnclosureEmm']$")

$instanceEmm.AddProperty("$MPElement[Name='System!System.Entity']/DisplayName$", $emm.ProductId)
$instanceEmm.AddProperty("$MPElement[Name='PowerToolsShm.EnclosureEmm']/Status$", $emm.Status)
$instanceEmm.AddProperty("$MPElement[Name='PowerToolsShm.EnclosureEmm']/EnclosureWWID$", $e.EnclosureWWID)

$instanceEmm.AddProperty("$MPElement[Name='PowerToolsShm.EnclosureEmm']/FirmwareRevision$", $emm.FirmwareRevision)
$instanceEmm.AddProperty("$MPElement[Name='PowerToolsShm.EnclosureEmm']/SerialNumber$", $emm.SerialNumber)
$instanceEmm.AddProperty("$MPElement[Name='PowerToolsShm.EnclosureEmm']/VendorId$", $emm.VendorId)
$instanceEmm.AddProperty("$MPElement[Name='PowerToolsShm.EnclosureEmm']/ProductId$", $emm.ProductId)
$instanceEmm.AddProperty("$MPElement[Name='PowerToolsShm.EnclosureEmm']/TargetPortWwn$", $emm.TargetPortWwn)
$instanceEmm.AddProperty("$MPElement[Name='PowerToolsShm.EnclosureEmm']/NumAdaptersConnected$", $emm.AdapterCount)
$instanceEmm.AddProperty("$MPElement[Name='PowerToolsShm.PhysicalEnclosure']/WWID$", $e.EnclosureWWID)
$instanceEmm.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.Computer']/PrincipalName$", $computerName)
$instanceEmm.AddProperty("$MPElement[Name='PowerToolsShm.HostBusAdapter']/WWID$", $a.SAS_WWID)

$discoveryData.AddInstance($instanceEmm)
}

#fans
$e.EnclosureWWID
$listfans = $shmrestObjFans.GetFansForEnclosure($e.EnclosureWWID)

foreach ($fan in $listfans)
{
$instanceFan = $discoveryData.CreateClassInstance("$MPElement[Name='PowerToolsShm.EnclosureFan']$")

$instanceFan.AddProperty("$MPElement[Name='System!System.Entity']/DisplayName$", $fan.Name)
$instanceFan.AddProperty("$MPElement[Name='PowerToolsShm.EnclosureFan']/Status$", $fan.Status)
$instanceFan.AddProperty("$MPElement[Name='PowerToolsShm.EnclosureFan']/EnclosureWWID$", $e.EnclosureWWID)

$instanceFan.AddProperty("$MPElement[Name='PowerToolsShm.EnclosureFan']/RPM$", $fan.RPM)
$instanceFan.AddProperty("$MPElement[Name='PowerToolsShm.EnclosureFan']/SpeedCode$", $fan.SpeedCode)
$instanceFan.AddProperty("$MPElement[Name='PowerToolsShm.EnclosureFan']/ElementIndex$", $fan.ElementIndex)
$instanceFan.AddProperty("$MPElement[Name='PowerToolsShm.PhysicalEnclosure']/WWID$", $e.EnclosureWWID)
$instanceFan.AddProperty("$MPElement[Name='PowerToolsShm.HostBusAdapter']/WWID$", $a.SAS_WWID)
$instanceFan.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.Computer']/PrincipalName$", $computerName)

$discoveryData.AddInstance($instanceFan)
}

#powersupplies

$listps = $shmrestObjFans.GetPowerSuppliesForEnclosure($e.EnclosureWWID)

foreach ($ps in $listps)
{
$instancePs = $discoveryData.CreateClassInstance("$MPElement[Name='PowerToolsShm.EnclosurePowerSupply']$")

$instancePs.AddProperty("$MPElement[Name='System!System.Entity']/DisplayName$", $ps.Name)
$instancePs.AddProperty("$MPElement[Name='PowerToolsShm.EnclosurePowerSupply']/Status$", $ps.Status)
$instancePs.AddProperty("$MPElement[Name='PowerToolsShm.EnclosurePowerSupply']/EnclosureWWID$", $e.EnclosureWWID)

$instancePs.AddProperty("$MPElement[Name='PowerToolsShm.EnclosurePowerSupply']/DCOverVoltage$", $ps.DCOverVoltage)
$instancePs.AddProperty("$MPElement[Name='PowerToolsShm.EnclosurePowerSupply']/DCUnderVoltage$", $ps.DCUnderVoltage)
$instancePs.AddProperty("$MPElement[Name='PowerToolsShm.EnclosurePowerSupply']/DCOverCurrent$", $ps.DCOverCurrent)
$instancePs.AddProperty("$MPElement[Name='PowerToolsShm.EnclosurePowerSupply']/DCFail$", $ps.DCFail)
$instancePs.AddProperty("$MPElement[Name='PowerToolsShm.EnclosurePowerSupply']/ACFail$", $ps.ACFail)
$instancePs.AddProperty("$MPElement[Name='PowerToolsShm.EnclosurePowerSupply']/ElementIndex$", $ps.ElementIndex)
$instancePs.AddProperty("$MPElement[Name='PowerToolsShm.PhysicalEnclosure']/WWID$", $e.EnclosureWWID)
$instancePs.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.Computer']/PrincipalName$", $computerName)
$instancePs.AddProperty("$MPElement[Name='PowerToolsShm.HostBusAdapter']/WWID$", $a.SAS_WWID)

$discoveryData.AddInstance($instancePs)
}

#voltagesensors
$listvs = $shmrestObjFans.GetVoltageSensorsForEnclosure($e.EnclosureWWID)

foreach ($Vs in $listvs)
{
$instanceVs = $discoveryData.CreateClassInstance("$MPElement[Name='PowerToolsShm.EnclosureVoltageSensor']$")

$instanceVs.AddProperty("$MPElement[Name='System!System.Entity']/DisplayName$", $Vs.Name)
$instanceVs.AddProperty("$MPElement[Name='PowerToolsShm.EnclosureVoltageSensor']/Status$", $Vs.Status)
$instanceVs.AddProperty("$MPElement[Name='PowerToolsShm.EnclosureVoltageSensor']/EnclosureWWID$", $e.EnclosureWWID)

$instanceVs.AddProperty("$MPElement[Name='PowerToolsShm.EnclosureVoltageSensor']/Millivolts$", $Vs.Millivolts)
$instanceVs.AddProperty("$MPElement[Name='PowerToolsShm.EnclosureVoltageSensor']/WarnOver$", $Vs.WarnOver)
$instanceVs.AddProperty("$MPElement[Name='PowerToolsShm.EnclosureVoltageSensor']/WarnUnder$", $Vs.WarnUnder)
$instanceVs.AddProperty("$MPElement[Name='PowerToolsShm.EnclosureVoltageSensor']/CritOver$", $Vs.CritOver)
$instanceVs.AddProperty("$MPElement[Name='PowerToolsShm.EnclosureVoltageSensor']/CritUnder$", $Vs.CritUnder)
$instanceVs.AddProperty("$MPElement[Name='PowerToolsShm.EnclosureVoltageSensor']/ElementIndex$", $Vs.ElementIndex)
$instanceVs.AddProperty("$MPElement[Name='PowerToolsShm.PhysicalEnclosure']/WWID$", $e.EnclosureWWID)
$instanceVs.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.Computer']/PrincipalName$", $computerName)
$instanceVs.AddProperty("$MPElement[Name='PowerToolsShm.HostBusAdapter']/WWID$", $a.SAS_WWID)

$discoveryData.AddInstance($instanceVs)
}

##currentSensors
$listcs = $shmrestObjFans.GetCurrentSensorsForEnclosure($e.EnclosureWWID)

foreach ($Cs in $listcs)
{
$instanceCs = $discoveryData.CreateClassInstance("$MPElement[Name='PowerToolsShm.EnclosureCurrentSensor']$")

$instanceCs.AddProperty("$MPElement[Name='System!System.Entity']/DisplayName$", $Cs.Name)
$instanceCs.AddProperty("$MPElement[Name='PowerToolsShm.EnclosureCurrentSensor']/Status$", $Cs.Status)
$instanceCs.AddProperty("$MPElement[Name='PowerToolsShm.EnclosureCurrentSensor']/EnclosureWWID$", $e.EnclosureWWID)
$instanceCs.AddProperty("$MPElement[Name='PowerToolsShm.EnclosureCurrentSensor']/CurrentMilliamps$", $Cs.CurrentMilliamps)
$instanceCs.AddProperty("$MPElement[Name='PowerToolsShm.EnclosureCurrentSensor']/ElementIndex$", $Cs.ElementIndex)
$instanceCs.AddProperty("$MPElement[Name='PowerToolsShm.PhysicalEnclosure']/WWID$", $e.EnclosureWWID)
$instanceCs.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.Computer']/PrincipalName$", $computerName)
$instanceCs.AddProperty("$MPElement[Name='PowerToolsShm.HostBusAdapter']/WWID$", $a.SAS_WWID)

$discoveryData.AddInstance($instanceCs)
}

#temperatureSensors
$listts = $shmrestObjFans.GetTemperatureSensorsForEnclosure($e.EnclosureWWID)

foreach ($Ts in $listts)
{
$instanceTs = $discoveryData.CreateClassInstance("$MPElement[Name='PowerToolsShm.EnclosureTemperatureSensor']$")

$instanceTs.AddProperty("$MPElement[Name='System!System.Entity']/DisplayName$", $Ts.Name)
$instanceTs.AddProperty("$MPElement[Name='PowerToolsShm.EnclosureTemperatureSensor']/Status$", $Ts.Status)
$instanceTs.AddProperty("$MPElement[Name='PowerToolsShm.EnclosureTemperatureSensor']/EnclosureWWID$", $e.EnclosureWWID)
$instanceTs.AddProperty("$MPElement[Name='PowerToolsShm.EnclosureTemperatureSensor']/TemperatureCelcius$", $Ts.TemperatureCel)
$instanceTs.AddProperty("$MPElement[Name='PowerToolsShm.EnclosureTemperatureSensor']/ElementIndex$", $Ts.ElementIndex)
$instanceTs.AddProperty("$MPElement[Name='PowerToolsShm.PhysicalEnclosure']/WWID$", $e.EnclosureWWID)
$instanceTs.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.Computer']/PrincipalName$", $computerName)
$instanceTs.AddProperty("$MPElement[Name='PowerToolsShm.HostBusAdapter']/WWID$", $a.SAS_WWID)

$discoveryData.AddInstance($instanceTs)
}

#temperatureSensors
$listdwrs = $shmrestObjFans.GetDrawersForEnclosure($e.EnclosureWWID)

foreach ($d in $listdwrs)
{
$instanceD = $discoveryData.CreateClassInstance("$MPElement[Name='PowerToolsShm.EnclosureDrawer']$")

$instanceD.AddProperty("$MPElement[Name='System!System.Entity']/DisplayName$", $d.Name)
$instanceD.AddProperty("$MPElement[Name='PowerToolsShm.EnclosureDrawer']/Status$", $d.Status)
$instanceD.AddProperty("$MPElement[Name='PowerToolsShm.EnclosureDrawer']/EnclosureWWID$", $d.EnclosureWWID)

$instanceD.AddProperty("$MPElement[Name='PowerToolsShm.EnclosureDrawer']/DrawerNumber$", $d.DrawerNumber)
$instanceD.AddProperty("$MPElement[Name='PowerToolsShm.EnclosureDrawer']/DriveCountInstalled$", $d.DriveCountInstalled)
$instanceD.AddProperty("$MPElement[Name='PowerToolsShm.EnclosureDrawer']/Failed$", $d.Failed)
$instanceD.AddProperty("$MPElement[Name='PowerToolsShm.EnclosureDrawer']/Open$", $d.Open)
$instanceD.AddProperty("$MPElement[Name='PowerToolsShm.EnclosureDrawer']/ElementIndex$", $d.ElementIndex)
$instanceD.AddProperty("$MPElement[Name='PowerToolsShm.PhysicalEnclosure']/WWID$", $e.EnclosureWWID)
$instanceD.AddProperty("$MPElement[Name='Windows!Microsoft.Windows.Computer']/PrincipalName$", $computerName)
$instanceD.AddProperty("$MPElement[Name='PowerToolsShm.HostBusAdapter']/WWID$", $a.SAS_WWID)

$discoveryData.AddInstance($instanceD)

$listDrawerDrives = $shmrestDrives.GetDrivesForDrawer($currentAdapterWwid, $e.EnclosureWWID, $d.DrawerNumber)
foreach ($ad in $listDrawerDrives)
{
if ($drivemap.ContainsKey($ad.TargetPortWwn))
{
$founddrive = $drivemap.Get_Item($ad.TargetPortWwn)

$relInstanceDd = $discoverydata.CreateRelationshipInstance("$MPElement[Name='PowerToolsShm.DrawerToDrive']$")
$relInstanceDd.Source = $instanceD
$relInstanceDd.Target = $founddrive
$discoveryData.AddInstance($relInstanceDd)
}
}
}
}
}

#$api.LogScriptEvent("DONE",9988,2,"Finished")

$discoveryData</Script></ScriptBody>
<!-- Parameters for the script. -->
<Parameters>
<Parameter>
<Name>sourceID</Name>
<Value>$MPElement$</Value>
</Parameter>
<Parameter>
<Name>managedEntityID</Name>
<Value>$Target/Id$</Value>
</Parameter>
<Parameter>
<Name>computerName</Name>
<Value>$Target/Host/Property[Type="Windows!Microsoft.Windows.Computer"]/PrincipalName$</Value>
</Parameter>
<Parameter>
<Name>restAddress</Name>
<Value>$Target/Property[Type="PowerToolsShm.SHMHost"]/RESTAddress$</Value>
</Parameter>
</Parameters>
<!-- TimeoutSeconds is the seconds that the script must be running before it is automatically ended. -->
<TimeoutSeconds>1200</TimeoutSeconds>
</DataSource>
</Discovery>