Hyper-V MPE 2019 Virtual Machines VHDs Discovery
HyperV.MPE.2019.VMs.VHDs.Discovery (Discovery)
Discovery
Element properties: Object Discovery Details: Member Modules:
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 “Select * From Msvm_ComputerSystem Where ElementName = '$virtualMachineName'”
$VMSettingData = Get-WmiObject -Namespace root\virtualization\v2 -Query “Associators of {$VM} Where ResultClass=Msvm_VirtualSystemSettingData AssocClass=Msvm_SettingsDefineState” -ComputerName $HyperVParent
$VirtualDiskResource = Get-WmiObject -Namespace root\virtualization\v2 -Query “Associators of {$VMSettingData} Where ResultClass=Msvm_StorageAllocationSettingData AssocClass=Msvm_VirtualSystemSettingDataComponent” -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>