Storage Objects Discovery Data Source

Microsoft.SystemCenter.VirtualMachineManager.Storage.2012.Discovery.DS (DataSourceModuleType)

Element properties:

TypeDataSourceModuleType
IsolationAny
AccessibilityInternal
RunAsDefault
OutputTypeSystem.Discovery.Data

Member Modules:

ID Module Type TypeId RunAs 
Scheduler DataSource System.Discovery.Scheduler Default
DiscoveryProbe ProbeAction Microsoft.Windows.PowerShellDiscoveryProbe Default

Overrideable Parameters:

IDParameterTypeSelectorDisplay NameDescription
IntervalSecondsint$Config/IntervalSeconds$Interval SecondsInterval Seconds
TimeoutSecondsint$Config/TimeoutSeconds$Timeout SecondsTimeout Seconds

Source Code:

<DataSourceModuleType ID="Microsoft.SystemCenter.VirtualMachineManager.Storage.2012.Discovery.DS" Accessibility="Internal">
<Configuration>
<xsd:element xmlns:xsd="http://www.w3.org/2001/XMLSchema" name="IntervalSeconds" type="xsd:int"/>
<xsd:element xmlns:xsd="http://www.w3.org/2001/XMLSchema" name="TimeoutSeconds" type="xsd:int"/>
<xsd:element xmlns:xsd="http://www.w3.org/2001/XMLSchema" name="ComputerName" type="xsd:string"/>
</Configuration>
<OverrideableParameters>
<OverrideableParameter ID="IntervalSeconds" ParameterType="int" Selector="$Config/IntervalSeconds$"/>
<OverrideableParameter ID="TimeoutSeconds" ParameterType="int" Selector="$Config/TimeoutSeconds$"/>
</OverrideableParameters>
<ModuleImplementation>
<Composite>
<MemberModules>
<DataSource ID="Scheduler" TypeID="System!System.Discovery.Scheduler">
<Scheduler>
<SimpleReccuringSchedule>
<Interval Unit="Seconds">$Config/IntervalSeconds$</Interval>
</SimpleReccuringSchedule>
<ExcludeDates/>
</Scheduler>
</DataSource>
<ProbeAction ID="DiscoveryProbe" TypeID="Windows!Microsoft.Windows.PowerShellDiscoveryProbe">
<ScriptName>StorageObjectsDiscovery.DS.ps1</ScriptName>
<ScriptBody><Script># Creates discovery data with Storage Objects
# else returns empty discovery data
# Script parameters
# - $ElementID - element ID
# - $TargetID - target ID

# - $ComputerName - principal computer name

# - $StorageProviderClassID - Storage Provider class id
# - $StorageProviderIDPropertyID
# - $StorageProviderTypePropertyID
# - $StorageProviderDescriptionPropertyID

# - $StorageArrayClassID - Storage Array class id
# - $StorageArrayIDPropertyID
# - $StorageArrayDescriptionPropertyID
# - $StorageArrayFirmwareVersionPropertyID
# - $StorageArrayManufacturePropertyID
# - $StorageArrayModelPropertyID
# - $StorageArraySerialNumberPropertyID

# - $StoragePoolClassID - Storage Pool class id
# - $StoragePoolIDPropertyID
# - $StoragePoolDescriptionPropertyID
# - $StoragePoolPrimordialPropertyID
# - $StoragePoolTotalManagedSpacePropertyID
# - $StoragePoolProvisioningTypeDefaultPropertyID
# - $StoragePoolSupportedProvisioningTypesPropertyID

# - $StorageLogicalUnitClassID - Storage Logical Unit class id
# - $StorageLogicalUnitIDPropertyID
# - $StorageLogicalUnitDescriptionPropertyID
# - $StorageLogicalUnitBlockSizePropertyID
# - $StorageLogicalUnitNumberOfBlocksPropertyID
# - $StorageLogicalUnitThinlyProvisionedPropertyID
# - $StorageLogicalUnitPrimordialPropertyID
# - $StorageLogicalUnitTotalCapacityPropertyID

# - $VMHostDiskClassID - VM Host Disk class id
# - $VMHostDiskIDPropertyID
# - $VMHostDiskCapacityPropertyID
# - $VMHostDiskIsClusteredPropertyID
# - $VMHostDiskIsSanAttachedPropertyID
# - $VMHostDiskIsPassThroughCapablePropertyID
# - $VMHostDiskLocationPropertyID
# - $VMHostDiskDiskIDPropertyID

# - $HostVolumeClassID - Host Volume class id
# - $HostVolumeIDPropertyID
# - $HostVolumeMountPointsPropertyID
# - $HostVolumeCapacityPropertyID
# - $HostVolumeVolumeLabelPropertyID
# - $HostVolumeIsClusteredPropertyID
# - $HostVolumeIsClusterSharedVolumePropertyID

# - $VHDClassID
# - $VHDIDPropertyID
# - $VHDDescriptionPropertyID
# - $VHDVHDTypePropertyID
# - $VHDVHDFormatTypePropertyID
# - $VHDVirtualizationPlatformPropertyID
# - $VHDMaximumSizePropertyID
# - $VHDLocationPropertyID

# - $VMHostIDPropertyID
# - $StorageLogicalUnitContainsVMHostDiskClassID
# - $VMHostDiskContainsHostVolumeClassID
# - $ComputerPrincipalNameKey - Windows Computer key name
# - $EntityDisplayNameKey - Entyty Display String key name

Param( [String] $ElementID,
[String] $TargetID,
[String] $ComputerName,

[String] $StorageProviderClassID,
[String] $StorageProviderIDPropertyID,
[String] $StorageProviderTypePropertyID,
[String] $StorageProviderDescriptionPropertyID,

[String] $StorageArrayClassID,
[String] $StorageArrayIDPropertyID,
[String] $StorageArrayDescriptionPropertyID,
[String] $StorageArrayFirmwareVersionPropertyID,
[String] $StorageArrayManufacturePropertyID,
[String] $StorageArrayModelPropertyID,
[String] $StorageArraySerialNumberPropertyID,

[String] $StoragePoolClassID,
[String] $StoragePoolIDPropertyID,
[String] $StoragePoolDescriptionPropertyID,
[String] $StoragePoolPrimordialPropertyID,
[String] $StoragePoolTotalManagedSpacePropertyID,
[String] $StoragePoolProvisioningTypeDefaultPropertyID,
[String] $StoragePoolSupportedProvisioningTypesPropertyID,

[String] $StorageLogicalUnitClassID,
[String] $StorageLogicalUnitIDPropertyID,
[String] $StorageLogicalUnitDescriptionPropertyID,
[String] $StorageLogicalUnitBlockSizePropertyID,
[String] $StorageLogicalUnitNumberOfBlocksPropertyID,
[String] $StorageLogicalUnitThinlyProvisionedPropertyID,
[String] $StorageLogicalUnitPrimordialPropertyID,
[String] $StorageLogicalUnitTotalCapacityPropertyID,

[String] $VMHostDiskClassID,
[String] $VMHostDiskIDPropertyID,
[String] $VMHostDiskCapacityPropertyID,
[String] $VMHostDiskIsClusteredPropertyID,
[String] $VMHostDiskIsSanAttachedPropertyID,
[String] $VMHostDiskIsPassThroughCapablePropertyID,
[String] $VMHostDiskLocationPropertyID,
[String] $VMHostDiskDiskIDPropertyID,

[String] $HostVolumeClassID,
[String] $HostVolumeIDPropertyID,
[String] $HostVolumeMountPointsPropertyID,
[String] $HostVolumeCapacityPropertyID,
[String] $HostVolumeVolumeLabelPropertyID,
[String] $HostVolumeIsClusteredPropertyID,
[String] $HostVolumeIsClusterSharedVolumePropertyID,

[String] $VHDClassID,
[String] $VHDIDPropertyID,
[String] $VHDDescriptionPropertyID,
[String] $VHDVHDTypePropertyID,
[String] $VHDVHDFormatTypePropertyID,
[String] $VHDVirtualizationPlatformPropertyID,
[String] $VHDMaximumSizePropertyID,
[String] $VHDLocationPropertyID,

[String] $VMHostIDPropertyID,
[String] $StorageLogicalUnitContainsVMHostDiskClassID,
[String] $VMHostDiskContainsHostVolumeClassID,
[String] $VDDClassID,
[String] $VDDIDPropertyID,
[String] $ComputerPrincipalNameKey,
[String] $EntityDisplayNameKey,
[String] $VirtualDiskDriveReferencesVHDClassID,
[String] $VHDReferencesHostVolumeClassID,
[String] $VirtualDiskDriveReferencesVMHostDiskClassID)

$errorActionPreference = 'stop'

# Create MOM API object
$momAPI = new-object -comObject MOM.ScriptAPI

# Create Discovery Data
$discoveryData = $momAPI.CreateDiscoveryData(0, $ElementID, $TargetID)

#Import VMM commands
$modulePath = get-itemproperty -path "hklm:\software\microsoft\microsoft system center virtual machine manager administrator console\Setup";
Import-Module ($modulePath.InstallPath + "bin\psModules\virtualmachinemanagercore\virtualmachinemanagercore.psd1") | Out-Null

# Connect to server
$server = Get-VMMServer -ComputerName $ComputerName

# Populate discovery data
# Add storage providers
$storageProviders = Get-SCStorageProvider -VMMServer $server -All
foreach ($storageProvider in $storageProviders)
{
# Create Storage Provider Object and hosting relationship
$storageProviderObject = $discoveryData.CreateClassInstance($StorageProviderClassID)
$storageProviderObject.AddProperty($StorageProviderIDPropertyID, $storageProvider.ID.ToString())
$storageProviderObject.AddProperty($StorageProviderTypePropertyID, $storageProvider.ProviderType.ToString())
$storageProviderObject.AddProperty($StorageProviderDescriptionPropertyID, $storageProvider.Description)
$storageProviderObject.AddProperty($ComputerPrincipalNameKey, $ComputerName)
$storageProviderObject.AddProperty($EntityDisplayNameKey, $storageProvider.Name)
$discoveryData.AddInstance($storageProviderObject)
}

# Add storage arrays
$storageArrays = Get-SCStorageArray -VMMServer $server -All
foreach ($storageArray in $storageArrays)
{
# Create Storage Array Object and hosting relationship
$storageArrayObject = $discoveryData.CreateClassInstance($StorageArrayClassID)
$storageArrayObject.AddProperty($StorageProviderIDPropertyID, $storageArray.StorageProvider.ID.ToString())
$storageArrayObject.AddProperty($ComputerPrincipalNameKey, $ComputerName)
$storageArrayObject.AddProperty($StorageArrayIDPropertyID, $storageArray.ID.ToString())
$storageArrayObject.AddProperty($StorageArrayDescriptionPropertyID, $storageArray.Description)
$storageArrayObject.AddProperty($StorageArrayFirmwareVersionPropertyID, $storageArray.FirmwareVersion)
$storageArrayObject.AddProperty($StorageArrayManufacturePropertyID, $storageArray.Manufacturer)
$storageArrayObject.AddProperty($StorageArrayModelPropertyID, $storageArray.Model)
$storageArrayObject.AddProperty($StorageArraySerialNumberPropertyID, $storageArray.SerialNumber)
$storageProviderObject.AddProperty($EntityDisplayNameKey, $storageArray.Name)
$discoveryData.AddInstance($storageArrayObject)
}

# Add hosted storage pools
$storagePools = Get-SCStoragePool -VMMServer $server -All
foreach ($storagePool in $storagePools)
{
# Create Storage Pool Object and hosting relationship
$storagePoolObject = $discoveryData.CreateClassInstance($StoragePoolClassID)
$storagePoolObject.AddProperty($StorageProviderIDPropertyID, $storagePool.StorageArray.StorageProvider.ID.ToString())
$storagePoolObject.AddProperty($ComputerPrincipalNameKey, $ComputerName)
$storagePoolObject.AddProperty($StorageArrayIDPropertyID, $storagePool.StorageArray.ID.ToString())
$storagePoolObject.AddProperty($StoragePoolIDPropertyID, $storagePool.ID.ToString())
$storagePoolObject.AddProperty($StoragePoolDescriptionPropertyID, $storagePool.Description)
$storagePoolObject.AddProperty($StoragePoolPrimordialPropertyID, $storagePool.Primordial)
$storagePoolObject.AddProperty($StoragePoolTotalManagedSpacePropertyID, $storagePool.TotalManagedSpace)

$ProvisioningTypeDefault = ""
if ($storagePool.ProvisioningTypeDefault)
{
$ProvisioningTypeDefault = $storagePool.ProvisioningTypeDefault.ToString()
}

$storagePoolObject.AddProperty($StoragePoolProvisioningTypeDefaultPropertyID, $ProvisioningTypeDefault)

$SupportedProvisioningTypes = ""
foreach($type in $storagePool.SupportedProvisioningTypes)
{
$SupportedProvisioningTypes = $SupportedProvisioningTypes + $type + "; "
}

$storagePoolObject.AddProperty($StoragePoolSupportedProvisioningTypesPropertyID, $SupportedProvisioningTypes)
$storagePoolObject.AddProperty($EntityDisplayNameKey, $storagePool.Name)
$discoveryData.AddInstance($storagePoolObject)
}

# Add hosted storage logical units (LUNs)
$storageLUNs = Get-SCStorageLogicalUnit -VMMServer $server -All
foreach ($storageLUN in $storageLUNs)
{
# Create LUN object and hosting relationship
$storageLUNObject = $discoveryData.CreateClassInstance($StorageLogicalUnitClassID)
$storageLUNObject.AddProperty($StorageProviderIDPropertyID, $storageLUN.StoragePool.StorageArray.StorageProvider.ID.ToString())
$storageLUNObject.AddProperty($ComputerPrincipalNameKey, $ComputerName)
$storageLUNObject.AddProperty($StorageArrayIDPropertyID, $storageLUN.StoragePool.StorageArray.ID.ToString())
$storageLUNObject.AddProperty($StoragePoolIDPropertyID, $storageLUN.StoragePool.ID.ToString())
$storageLUNObject.AddProperty($StorageLogicalUnitIDPropertyID, $storageLUN.ID.ToString())
$storageLUNObject.AddProperty($StorageLogicalUnitDescriptionPropertyID, $storageLUN.Description)
$storageLUNObject.AddProperty($StorageLogicalUnitBlockSizePropertyID, $storageLUN.BlockSize)
$storageLUNObject.AddProperty($StorageLogicalUnitNumberOfBlocksPropertyID, $storageLUN.NumberOfBlocks)
$storageLUNObject.AddProperty($StorageLogicalUnitThinlyProvisionedPropertyID, $storageLUN.ThinlyProvisioned)
$storageLUNObject.AddProperty($StorageLogicalUnitPrimordialPropertyID, $storageLUN.Primordial)
$storageLUNObject.AddProperty($StorageLogicalUnitTotalCapacityPropertyID, $storageLUN.TotalCapacity)
$storageLUNObject.AddProperty($EntityDisplayNameKey, $storageLUN.Name)
$discoveryData.AddInstance($storageLUNObject)
}

# Add VM Host Disks and relationships
$VMHostDisks = Get-SCStorageDisk -VMMServer $server
foreach ($VMHostDisk in $VMHostDisks)
{
# Create VMHostDisk and hosting relationship
$VMHostDiskObject = $discoveryData.CreateClassInstance($VMHostDiskClassID)
$VMHostDiskObject.AddProperty($ComputerPrincipalNameKey, $VMHostDisk.VMHost.FullyQualifiedDomainName)
$VMHostDiskObject.AddProperty($VMHostIDPropertyID, $VMHostDisk.VMHost.ID.ToString())
$VMHostDiskObject.AddProperty($VMHostDiskIDPropertyID, $VMHostDisk.ID.ToString())
$VMHostDiskObject.AddProperty($VMHostDiskCapacityPropertyID, $VMHostDisk.Capacity)
$VMHostDiskObject.AddProperty($VMHostDiskIsClusteredPropertyID, $VMHostDisk.IsClustered)
$VMHostDiskObject.AddProperty($VMHostDiskIsSanAttachedPropertyID, $VMHostDisk.IsSanAttached)
$VMHostDiskObject.AddProperty($VMHostDiskIsPassThroughCapablePropertyID, $VMHostDisk.IsPassThroughCapable)
$VMHostDiskObject.AddProperty($VMHostDiskLocationPropertyID, $VMHostDisk.Location)
$VMHostDiskObject.AddProperty($VMHostDiskDiskIDPropertyID, $VMHostDisk.DiskID.ToString())
$VMHostDiskObject.AddProperty($EntityDisplayNameKey, $VMHostDisk.Name)
$discoveryData.AddInstance($VMHostDiskObject)

# Add conteinment relationship to LUNs
foreach ($storageLUN in $VMHostDisk.StorageLogicalUnit)
{
# Create LUN object and hosting relationship, but don't add it to discovery data, just object for relationship mapping
$storageLUNObject = $discoveryData.CreateClassInstance($StorageLogicalUnitClassID)
$storageLUNObject.AddProperty($StorageProviderIDPropertyID, $storageLUN.StoragePool.StorageArray.StorageProvider.ID.ToString())
$storageLUNObject.AddProperty($ComputerPrincipalNameKey, $ComputerName)
$storageLUNObject.AddProperty($StorageArrayIDPropertyID, $storageLUN.StoragePool.StorageArray.ID.ToString())
$storageLUNObject.AddProperty($StoragePoolIDPropertyID, $storageLUN.StoragePool.ID.ToString())
$storageLUNObject.AddProperty($StorageLogicalUnitIDPropertyID, $storageLUN.ID.ToString())

# Create relationship object
$relationship = $discoveryData.CreateRelationshipInstance($StorageLogicalUnitContainsVMHostDiskClassID)
$relationship.Source = $storageLUNObject
$relationship.Target = $VMHostDiskObject
$discoveryData.AddInstance($relationship)
}
}

# Add reference relationship from Virtual Disk Drive to VM Host Disk
$VirtualDiskDrives = Get-SCVirtualDiskDrive -VMMServer $server -All | where {$_.PassThroughDisk -ne $null}
foreach ($VirtualDiskDrive in $VirtualDiskDrives)
{
# Create VMHostDisk and hosting relationship
$VMHostDiskObject = $discoveryData.CreateClassInstance($VMHostDiskClassID)
$VMHostDiskObject.AddProperty($ComputerPrincipalNameKey, $VirtualDiskDrive.PassThroughDisk.VMHost.FullyQualifiedDomainName)
$VMHostDiskObject.AddProperty($VMHostIDPropertyID, $VirtualDiskDrive.PassThroughDisk.VMHost.ID.ToString())
$VMHostDiskObject.AddProperty($VMHostDiskIDPropertyID, $VirtualDiskDrive.PassThroughDisk.ID.ToString())

# Create VirtualDiskDrive object
$VDDObject = $discoveryData.CreateClassInstance($VDDClassID)
$VDDObject.AddProperty($VDDIDPropertyID, $VirtualDiskDrive.ID.ToString())

# Create relationship object
$relationship = $discoveryData.CreateRelationshipInstance($VirtualDiskDriveReferencesVMHostDiskClassID)
$relationship.Source = $VDDObject
$relationship.Target = $VMHostDiskObject
$discoveryData.AddInstance($relationship)
}


# Add Virtual Hard Disk objects
$VirtualHardDisks = Get-VirtualHardDisk -VMMServer $server -All
foreach ($VirtualHardDisk in $VirtualHardDisks)
{
# Create VirtualHardDisk
$VHDObject = $discoveryData.CreateClassInstance($VHDClassID)
$VHDObject.AddProperty($VHDIDPropertyID, $VirtualHardDisk.ID.ToString())
$VHDObject.AddProperty($VHDDescriptionPropertyID, $VirtualHardDisk.Description)
$VHDObject.AddProperty($VHDVHDTypePropertyID, $VirtualHardDisk.VHDType.ToString())
$VHDObject.AddProperty($VHDVHDFormatTypePropertyID, $VirtualHardDisk.VHDFormatType.ToString())
$VHDObject.AddProperty($VHDVirtualizationPlatformPropertyID, $VirtualHardDisk.VirtualizationPlatform.ToString())
$VHDObject.AddProperty($VHDMaximumSizePropertyID, $VirtualHardDisk.MaximumSize)
$VHDObject.AddProperty($VHDLocationPropertyID, $VirtualHardDisk.Location)
$VHDObject.AddProperty($EntityDisplayNameKey, $VirtualHardDisk.Name)
$discoveryData.AddInstance($VHDObject)
}

# Add reference relationship from Virtual Disk Drive to Virtual Hard Disk
$VirtualDiskDrives = Get-SCVirtualDiskDrive -VMMServer $server -All | where {$_.VirtualHardDisk -ne $null}
foreach ($VirtualDiskDrive in $VirtualDiskDrives)
{
# Create VirtualDiskDrive object
$VDDObject = $discoveryData.CreateClassInstance($VDDClassID)
$VDDObject.AddProperty($VDDIDPropertyID, $VirtualDiskDrive.ID.ToString())

# Create VirtualHardDisk object
$VHDObject = $discoveryData.CreateClassInstance($VHDClassID)
$VHDObject.AddProperty($VHDIDPropertyID, $VirtualDiskDrive.VirtualHardDisk.ID.ToString())

# Create relationship object
$relationship = $discoveryData.CreateRelationshipInstance($VirtualDiskDriveReferencesVHDClassID)
$relationship.Source = $VDDObject
$relationship.Target = $VHDObject
$discoveryData.AddInstance($relationship)
}

# Add Host Volume and Host Volume relationships

$HostVolumes = Get-SCStorageVolume -VMMServer $server
$VirtualHardDisks = Get-VirtualHardDisk -VMMServer $server -All
foreach ($HostVolume in $HostVolumes)
{
# Create HostVolume and hosting relationship
$HostVolumeObject = $discoveryData.CreateClassInstance($HostVolumeClassID)
$HostVolumeObject.AddProperty($ComputerPrincipalNameKey, $HostVolume.VMHost.FullyQualifiedDomainName)
$HostVolumeObject.AddProperty($VMHostIDPropertyID, $HostVolume.VMHost.ID.ToString())
$HostVolumeObject.AddProperty($HostVolumeIDPropertyID, $HostVolume.ID.ToString())

$MountPoints = ""
foreach($MountPoint in $HostVolume.MountPoints)
{
$MountPoints = $MountPoints + $MountPoint + "; "
}

$HostVolumeObject.AddProperty($HostVolumeMountPointsPropertyID, $MountPoints)
$HostVolumeObject.AddProperty($HostVolumeCapacityPropertyID, $HostVolume.Capacity)
$HostVolumeObject.AddProperty($HostVolumeVolumeLabelPropertyID, $HostVolume.VolumeLabel)
$HostVolumeObject.AddProperty($HostVolumeIsClusteredPropertyID, $HostVolume.IsClustered)
$HostVolumeObject.AddProperty($HostVolumeIsClusterSharedVolumePropertyID, $HostVolume.IsClusterSharedVolume)
$HostVolumeObject.AddProperty($EntityDisplayNameKey, $HostVolume.Name)
$discoveryData.AddInstance($HostVolumeObject)

# Add conteinment relationship to VM Host Disk
foreach ($VMHostDisk in $HostVolume.HostDisk)
{
# Create VM Host Disk object and hosting relationship, but don't add it to discovery data, just object for relationship mapping
$VMHostDiskObject = $discoveryData.CreateClassInstance($VMHostDiskClassID)
$VMHostDiskObject.AddProperty($ComputerPrincipalNameKey, $VMHostDisk.VMHost.FullyQualifiedDomainName)
$VMHostDiskObject.AddProperty($VMHostIDPropertyID, $VMHostDisk.VMHost.ID.ToString())
$VMHostDiskObject.AddProperty($VMHostDiskIDPropertyID, $VMHostDisk.ID.ToString())

# Create relationship object
$relationship = $discoveryData.CreateRelationshipInstance($VMHostDiskContainsHostVolumeClassID)
$relationship.Source = $VMHostDiskObject
$relationship.Target = $HostVolumeObject
$discoveryData.AddInstance($relationship)
}

# Add reference relationship from VHD to Host Volume

foreach ($VirtualHardDisk in $VirtualHardDisks)
{
if ($VirtualHardDisk.HostVolumeId -eq $HostVolume.Id)
{
# Create VirtualHardDisk
$VHDObject = $discoveryData.CreateClassInstance($VHDClassID)
$VHDObject.AddProperty($VHDIDPropertyID, $VirtualHardDisk.ID.ToString())

# Create relationship object
$relationship = $discoveryData.CreateRelationshipInstance($VHDReferencesHostVolumeClassID)
$relationship.Source = $VHDObject
$relationship.Target = $HostVolumeObject
$discoveryData.AddInstance($relationship)
}
}
}

# Return discovery data. If there is no data, return empty data (i.e. delete object and reference)
$discoveryData</Script></ScriptBody>
<Parameters>
<!-- Discovery data arguments -->
<Parameter>
<Name>ElementID</Name>
<Value>$MPElement$</Value>
</Parameter>
<Parameter>
<Name>TargetID</Name>
<Value>$Target/Id$</Value>
</Parameter>
<Parameter>
<Name>ComputerName</Name>
<Value>$Target/Host/Property[Type='Windows!Microsoft.Windows.Computer']/PrincipalName$</Value>
</Parameter>
<!-- Storage Provider -->
<Parameter>
<Name>StorageProviderClassID</Name>
<Value>$MPElement[Name='Microsoft.SystemCenter.VirtualMachineManager.Storage.2012.StorageProvider']$</Value>
</Parameter>
<Parameter>
<Name>StorageProviderIDPropertyID</Name>
<Value>$MPElement[Name='SL!Microsoft.SystemCenter.VirtualMachineManager.Storage.StorageProvider']/ID$</Value>
</Parameter>
<Parameter>
<Name>StorageProviderTypePropertyID</Name>
<Value>$MPElement[Name='SL!Microsoft.SystemCenter.VirtualMachineManager.Storage.StorageProvider']/Type$</Value>
</Parameter>
<Parameter>
<Name>StorageProviderDescriptionPropertyID</Name>
<Value>$MPElement[Name='SL!Microsoft.SystemCenter.VirtualMachineManager.Storage.StorageProvider']/Description$</Value>
</Parameter>
<!-- Storage Array -->
<Parameter>
<Name>StorageArrayClassID</Name>
<Value>$MPElement[Name='Microsoft.SystemCenter.VirtualMachineManager.Storage.2012.StorageArray']$</Value>
</Parameter>
<Parameter>
<Name>StorageArrayDescriptionPropertyID</Name>
<Value>$MPElement[Name='SL!Microsoft.SystemCenter.VirtualMachineManager.Storage.StorageArray']/Description$</Value>
</Parameter>
<Parameter>
<Name>StorageArrayFirmwareVersionPropertyID</Name>
<Value>$MPElement[Name='SL!Microsoft.SystemCenter.VirtualMachineManager.Storage.StorageArray']/FirmwareVersion$</Value>
</Parameter>
<Parameter>
<Name>StorageArrayManufacturePropertyID</Name>
<Value>$MPElement[Name='SL!Microsoft.SystemCenter.VirtualMachineManager.Storage.StorageArray']/Manufacture$</Value>
</Parameter>
<Parameter>
<Name>StorageArrayIDPropertyID</Name>
<Value>$MPElement[Name='SL!Microsoft.SystemCenter.VirtualMachineManager.Storage.StorageArray']/ID$</Value>
</Parameter>
<Parameter>
<Name>StorageArrayModelPropertyID</Name>
<Value>$MPElement[Name='SL!Microsoft.SystemCenter.VirtualMachineManager.Storage.StorageArray']/Model$</Value>
</Parameter>
<Parameter>
<Name>StorageArraySerialNumberPropertyID</Name>
<Value>$MPElement[Name='SL!Microsoft.SystemCenter.VirtualMachineManager.Storage.StorageArray']/SerialNumber$</Value>
</Parameter>
<!-- Storage Pool-->
<Parameter>
<Name>StoragePoolClassID</Name>
<Value>$MPElement[Name='Microsoft.SystemCenter.VirtualMachineManager.Storage.2012.StoragePool']$</Value>
</Parameter>
<Parameter>
<Name>StoragePoolIDPropertyID</Name>
<Value>$MPElement[Name='SL!Microsoft.SystemCenter.VirtualMachineManager.Storage.StoragePool']/ID$</Value>
</Parameter>
<Parameter>
<Name>StoragePoolDescriptionPropertyID</Name>
<Value>$MPElement[Name='SL!Microsoft.SystemCenter.VirtualMachineManager.Storage.StoragePool']/Description$</Value>
</Parameter>
<Parameter>
<Name>StoragePoolPrimordialPropertyID</Name>
<Value>$MPElement[Name='SL!Microsoft.SystemCenter.VirtualMachineManager.Storage.StoragePool']/Primordial$</Value>
</Parameter>
<Parameter>
<Name>StoragePoolTotalManagedSpacePropertyID</Name>
<Value>$MPElement[Name='SL!Microsoft.SystemCenter.VirtualMachineManager.Storage.StoragePool']/TotalManagedSpace$</Value>
</Parameter>
<Parameter>
<Name>StoragePoolProvisioningTypeDefaultPropertyID</Name>
<Value>$MPElement[Name='SL!Microsoft.SystemCenter.VirtualMachineManager.Storage.StoragePool']/ProvisioningTypeDefault$</Value>
</Parameter>
<Parameter>
<Name>StoragePoolSupportedProvisioningTypesPropertyID</Name>
<Value>$MPElement[Name='SL!Microsoft.SystemCenter.VirtualMachineManager.Storage.StoragePool']/SupportedProvisioningTypes$</Value>
</Parameter>
<!-- Storage Volume-->
<Parameter>
<Name>StorageLogicalUnitClassID</Name>
<Value>$MPElement[Name='Microsoft.SystemCenter.VirtualMachineManager.Storage.2012.StorageLogicalUnit']$</Value>
</Parameter>
<Parameter>
<Name>StorageLogicalUnitIDPropertyID</Name>
<Value>$MPElement[Name='SL!Microsoft.SystemCenter.VirtualMachineManager.Storage.StorageLogicalUnit']/ID$</Value>
</Parameter>
<Parameter>
<Name>StorageLogicalUnitDescriptionPropertyID</Name>
<Value>$MPElement[Name='SL!Microsoft.SystemCenter.VirtualMachineManager.Storage.StorageLogicalUnit']/Description$</Value>
</Parameter>
<Parameter>
<Name>StorageLogicalUnitBlockSizePropertyID</Name>
<Value>$MPElement[Name='SL!Microsoft.SystemCenter.VirtualMachineManager.Storage.StorageLogicalUnit']/BlockSize$</Value>
</Parameter>
<Parameter>
<Name>StorageLogicalUnitNumberOfBlocksPropertyID</Name>
<Value>$MPElement[Name='SL!Microsoft.SystemCenter.VirtualMachineManager.Storage.StorageLogicalUnit']/NumberOfBlocks$</Value>
</Parameter>
<Parameter>
<Name>StorageLogicalUnitThinlyProvisionedPropertyID</Name>
<Value>$MPElement[Name='SL!Microsoft.SystemCenter.VirtualMachineManager.Storage.StorageLogicalUnit']/ThinlyProvisioned$</Value>
</Parameter>
<Parameter>
<Name>StorageLogicalUnitPrimordialPropertyID</Name>
<Value>$MPElement[Name='SL!Microsoft.SystemCenter.VirtualMachineManager.Storage.StorageLogicalUnit']/Primordial$</Value>
</Parameter>
<Parameter>
<Name>StorageLogicalUnitTotalCapacityPropertyID</Name>
<Value>$MPElement[Name='SL!Microsoft.SystemCenter.VirtualMachineManager.Storage.StorageLogicalUnit']/TotalCapacity$</Value>
</Parameter>
<!-- VM Host Disk-->
<Parameter>
<Name>VMHostDiskClassID</Name>
<Value>$MPElement[Name='Microsoft.SystemCenter.VirtualMachineManager.Storage.2012.VMHostDisk']$</Value>
</Parameter>
<Parameter>
<Name>VMHostDiskIDPropertyID</Name>
<Value>$MPElement[Name='SL!Microsoft.SystemCenter.VirtualMachineManager.Storage.VMHostDisk']/ID$</Value>
</Parameter>
<Parameter>
<Name>VMHostDiskCapacityPropertyID</Name>
<Value>$MPElement[Name='SL!Microsoft.SystemCenter.VirtualMachineManager.Storage.VMHostDisk']/Capacity$</Value>
</Parameter>
<Parameter>
<Name>VMHostDiskIsClusteredPropertyID</Name>
<Value>$MPElement[Name='SL!Microsoft.SystemCenter.VirtualMachineManager.Storage.VMHostDisk']/IsClustered$</Value>
</Parameter>
<Parameter>
<Name>VMHostDiskIsSanAttachedPropertyID</Name>
<Value>$MPElement[Name='SL!Microsoft.SystemCenter.VirtualMachineManager.Storage.VMHostDisk']/IsSanAttached$</Value>
</Parameter>
<Parameter>
<Name>VMHostDiskIsPassThroughCapablePropertyID</Name>
<Value>$MPElement[Name='SL!Microsoft.SystemCenter.VirtualMachineManager.Storage.VMHostDisk']/IsPassThroughCapable$</Value>
</Parameter>
<Parameter>
<Name>VMHostDiskDiskIDPropertyID</Name>
<Value>$MPElement[Name='SL!Microsoft.SystemCenter.VirtualMachineManager.Storage.VMHostDisk']/DiskID$</Value>
</Parameter>
<Parameter>
<Name>VMHostDiskLocationPropertyID</Name>
<Value>$MPElement[Name='SL!Microsoft.SystemCenter.VirtualMachineManager.Storage.VMHostDisk']/Location$</Value>
</Parameter>
<!-- Host volume-->
<Parameter>
<Name>HostVolumeClassID</Name>
<Value>$MPElement[Name='Microsoft.SystemCenter.VirtualMachineManager.Storage.2012.HostVolume']$</Value>
</Parameter>
<Parameter>
<Name>HostVolumeIDPropertyID</Name>
<Value>$MPElement[Name='SL!Microsoft.SystemCenter.VirtualMachineManager.Storage.HostVolume']/ID$</Value>
</Parameter>
<Parameter>
<Name>HostVolumeMountPointsPropertyID</Name>
<Value>$MPElement[Name='SL!Microsoft.SystemCenter.VirtualMachineManager.Storage.HostVolume']/MountPoints$</Value>
</Parameter>
<Parameter>
<Name>HostVolumeCapacityPropertyID</Name>
<Value>$MPElement[Name='SL!Microsoft.SystemCenter.VirtualMachineManager.Storage.HostVolume']/Capacity$</Value>
</Parameter>
<Parameter>
<Name>HostVolumeVolumeLabelPropertyID</Name>
<Value>$MPElement[Name='SL!Microsoft.SystemCenter.VirtualMachineManager.Storage.HostVolume']/VolumeLabel$</Value>
</Parameter>
<Parameter>
<Name>HostVolumeIsClusteredPropertyID</Name>
<Value>$MPElement[Name='SL!Microsoft.SystemCenter.VirtualMachineManager.Storage.HostVolume']/IsClustered$</Value>
</Parameter>
<Parameter>
<Name>HostVolumeIsClusterSharedVolumePropertyID</Name>
<Value>$MPElement[Name='SL!Microsoft.SystemCenter.VirtualMachineManager.Storage.HostVolume']/IsClusterSharedVolume$</Value>
</Parameter>
<!-- VHD class-->
<Parameter>
<Name>VHDClassID</Name>
<Value>$MPElement[Name='SL!Microsoft.SystemCenter.VirtualMachineManager.Storage.VHD']$</Value>
</Parameter>
<Parameter>
<Name>VHDIDPropertyID</Name>
<Value>$MPElement[Name='SL!Microsoft.SystemCenter.VirtualMachineManager.Storage.VHD']/ID$</Value>
</Parameter>
<Parameter>
<Name>VHDDescriptionPropertyID</Name>
<Value>$MPElement[Name='SL!Microsoft.SystemCenter.VirtualMachineManager.Storage.VHD']/Description$</Value>
</Parameter>
<Parameter>
<Name>VHDVHDTypePropertyID</Name>
<Value>$MPElement[Name='SL!Microsoft.SystemCenter.VirtualMachineManager.Storage.VHD']/VHDType$</Value>
</Parameter>
<Parameter>
<Name>VHDVHDFormatTypePropertyID</Name>
<Value>$MPElement[Name='SL!Microsoft.SystemCenter.VirtualMachineManager.Storage.VHD']/VHDFormatType$</Value>
</Parameter>
<Parameter>
<Name>VHDVirtualizationPlatformPropertyID</Name>
<Value>$MPElement[Name='SL!Microsoft.SystemCenter.VirtualMachineManager.Storage.VHD']/VirtualizationPlatform$</Value>
</Parameter>
<Parameter>
<Name>VHDMaximumSizePropertyID</Name>
<Value>$MPElement[Name='SL!Microsoft.SystemCenter.VirtualMachineManager.Storage.VHD']/MaximumSize$</Value>
</Parameter>
<Parameter>
<Name>VHDLocationPropertyID</Name>
<Value>$MPElement[Name='SL!Microsoft.SystemCenter.VirtualMachineManager.Storage.VHD']/Location$</Value>
</Parameter>
<!-- Relationships classes and referenced ckases and properties IDs-->
<Parameter>
<Name>StorageLogicalUnitContainsVMHostDiskClassID</Name>
<Value>$MPElement[Name='SL!Microsoft.SystemCenter.VirtualMachineManager.Storage.StorageLogicalUnitContainsVMHostDisk']$</Value>
</Parameter>
<Parameter>
<Name>VMHostDiskContainsHostVolumeClassID</Name>
<Value>$MPElement[Name='SL!Microsoft.SystemCenter.VirtualMachineManager.Storage.VMHostDiskContainsHostVolume']$</Value>
</Parameter>
<Parameter>
<Name>VMHostIDPropertyID</Name>
<Value>$MPElement[Name='VMMLibrary!Microsoft.SystemCenter.VirtualMachineManager.VMHost']/VMMId$</Value>
</Parameter>
<Parameter>
<Name>VDDClassID</Name>
<Value>$MPElement[Name='VMM2012Discovery!Microsoft.SystemCenter.VirtualMachineManager.2012.VirtualDiskDrive']$</Value>
</Parameter>
<Parameter>
<Name>VDDIDPropertyID</Name>
<Value>$MPElement[Name='VMMLibrary!Microsoft.SystemCenter.VirtualMachineManager.VirtualDiskDrive']/VMMId$</Value>
</Parameter>
<Parameter>
<Name>VirtualDiskDriveReferencesVHDClassID</Name>
<Value>$MPElement[Name='SL!Microsoft.SystemCenter.VirtualMachineManager.Storage.VirtualDiskDriveReferencesVHD']$</Value>
</Parameter>
<Parameter>
<Name>VHDReferencesHostVolumeClassID</Name>
<Value>$MPElement[Name='SL!Microsoft.SystemCenter.VirtualMachineManager.Storage.VHDReferencesHostVolume']$</Value>
</Parameter>
<Parameter>
<Name>VirtualDiskDriveReferencesVMHostDiskClassID</Name>
<Value>$MPElement[Name='SL!Microsoft.SystemCenter.VirtualMachineManager.Storage.VirtualDiskDriveReferencesVMHostDisk']$</Value>
</Parameter>
<Parameter>
<Name>ComputerPrincipalNameKey</Name>
<Value>$MPElement[Name='Windows!Microsoft.Windows.Computer']/PrincipalName$</Value>
</Parameter>
<Parameter>
<Name>EntityDisplayNameKey</Name>
<Value>$MPElement[Name="System!System.Entity"]/DisplayName$</Value>
</Parameter>
</Parameters>
<TimeoutSeconds>$Config/TimeoutSeconds$</TimeoutSeconds>
<StrictErrorHandling>false</StrictErrorHandling>
</ProbeAction>
</MemberModules>
<Composition>
<Node ID="DiscoveryProbe">
<Node ID="Scheduler"/>
</Node>
</Composition>
</Composite>
</ModuleImplementation>
<OutputType>System!System.Discovery.Data</OutputType>
</DataSourceModuleType>