Hyper-V MPE 2019 Virtual Machines VHDs Discovery

HyperV.MPE.2019.VMs.VHDs.Discovery (Discovery)

Discovery

Element properties:

TargetMicrosoft.Windows.HyperV.Discovery.VirtualMachine
EnabledTrue
Frequency86400
RemotableFalse

Object Discovery Details:

Discovered Classes and their attribuets:

Member Modules:

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

Source Code:

<Discovery ID="HyperV.MPE.2019.VMs.VHDs.Discovery" Enabled="true" Target="MSWinHV2019Dis!Microsoft.Windows.HyperV.Discovery.VirtualMachine" ConfirmDelivery="true" Remotable="true" Priority="Normal">
<Category>Discovery</Category>
<DiscoveryTypes>
<DiscoveryClass TypeID="HyperV.MPE.2019.VMs.VHDs">
<Property TypeID="HyperV.MPE.2019.VMs.VHDs" PropertyID="VHDName"/>
<Property TypeID="MSWinHVLib!Microsoft.Windows.HyperV.VirtualHardwareComponent" PropertyID="DeviceId"/>
<Property TypeID="MSWinHVLib!Microsoft.Windows.HyperV.VirtualHardwareComponent" PropertyID="Name"/>
<Property TypeID="MSWinHVLib!Microsoft.Windows.HyperV.VirtualHardwareComponent" PropertyID="VirtualMachineName"/>
<Property TypeID="SLib!System.Entity" PropertyID="DisplayName"/>
</DiscoveryClass>
</DiscoveryTypes>
<DataSource ID="ScriptPowershell" TypeID="MSWinLib!Microsoft.Windows.TimedPowerShell.DiscoveryProvider">
<IntervalSeconds>86400</IntervalSeconds>
<SyncTime/>
<ScriptName>DiscoveryVirtualMachineVHDs.PS.ps1</ScriptName>
<ScriptBody><Script>
param($sourceId,$managedEntityId,$NetBIOSComputerName,$computerName,$virtualMachineID,$virtualMachineName)

$HyperVParent = $NetBIOSComputerName

#Classes for Hyper-V 2012 / 2019
$VM = Get-WmiObject -Namespace root\virtualization\v2 -ComputerName $HyperVParent -Query &#x201C;Select * From Msvm_ComputerSystem Where ElementName = '$virtualMachineName'&#x201D;
$VMSettingData = Get-WmiObject -Namespace root\virtualization\v2 -Query &#x201C;Associators of {$VM} Where ResultClass=Msvm_VirtualSystemSettingData AssocClass=Msvm_SettingsDefineState&#x201D; -ComputerName $HyperVParent
$VirtualDiskResource = Get-WmiObject -Namespace root\virtualization\v2 -Query &#x201C;Associators of {$VMSettingData} Where ResultClass=Msvm_StorageAllocationSettingData AssocClass=Msvm_VirtualSystemSettingDataComponent&#x201D; -ComputerName $HyperVParent
$VHD_PATH = $null

#SCOM
$api = New-Object -comObject 'MOM.ScriptAPI'
$discoveryData = $api.CreateDiscoveryData(0, $sourceId, $managedEntityId)

#$api.LogScriptEvent("Params: ",3183,0, $sourceId + " " + $managedEntityId + " " + $NetBIOSComputerName + " " + $computerName + " " + $virtualMachineID + " " + $virtualMachineName)

Foreach ($VHD in $VirtualDiskResource)
{

$parsedforSCOM = $VHD.HostResource

$finalOutput = [string]$parsedforSCOM | Foreach-Object {$_ -replace "\\", "-"}

#Create a Central Queue class instance for each subfolder.
$instance = $discoveryData.CreateClassInstance("$MPElement[Name='HyperV.MPE.2019.VMs.VHDs']$")

$instance.AddProperty("$MPElement[Name='SLib!System.Entity']/DisplayName$",$virtualMachineName)

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

$instance.AddProperty("$MPElement[Name='MSWinHVLib!Microsoft.Windows.HyperV.ServerRole']/ServerId$", $computerName)
$instance.AddProperty("$MPElement[Name='MSWinHVLib!Microsoft.Windows.HyperV.VirtualMachine']/VirtualMachineId$", $virtualMachineID)

$instance.AddProperty("$MPElement[Name='MSWinHVLib!Microsoft.Windows.HyperV.VirtualHardwareComponent']/DeviceId$", $finalOutput)
$instance.AddProperty("$MPElement[Name='MSWinHVLib!Microsoft.Windows.HyperV.VirtualHardwareComponent']/Name$", $finalOutput)
$instance.AddProperty("$MPElement[Name='MSWinHVLib!Microsoft.Windows.HyperV.VirtualHardwareComponent']/VirtualMachineName$", $virtualMachineName)
$instance.AddProperty("$MPElement[Name='HyperV.MPE.2019.VMs.VHDs']/VHDName$", $finalOutput)

$discoveryData.AddInstance($instance)
#$api.LogScriptEvent("ADD: ",3184,0, "parsedforSCOM: " + $parsedforSCOM)

#$api.LogScriptEvent("ADD: ",3185,0, "Added VM VHD: " + $finalOutput)

}
#Return the discovery data.
$discoveryData

</Script></ScriptBody>
<Parameters>
<Parameter>
<Name>sourceID</Name>
<Value>$MPElement$</Value>
</Parameter>
<Parameter>
<Name>managedEntityID</Name>
<Value>$Target/Id$</Value>
</Parameter>
<Parameter>
<Name>NetBIOSComputerName</Name>
<Value>$Target/Host/Host/Property[Type="MSWinLib!Microsoft.Windows.Computer"]/NetbiosComputerName$</Value>
</Parameter>
<Parameter>
<Name>computerName</Name>
<Value>$Target/Host/Host/Property[Type="MSWinLib!Microsoft.Windows.Computer"]/PrincipalName$</Value>
</Parameter>
<Parameter>
<Name>virtualMachineID</Name>
<Value>$Target/Property[Type="MSWinHVLib!Microsoft.Windows.HyperV.VirtualMachine"]/VirtualMachineId$</Value>
</Parameter>
<Parameter>
<Name>virtualMachineName</Name>
<Value>$Target/Property[Type="MSWinHVLib!Microsoft.Windows.HyperV.VirtualMachine"]/VirtualMachineName$</Value>
</Parameter>
</Parameters>
<TimeoutSeconds>240</TimeoutSeconds>
</DataSource>
</Discovery>