Hyper-V WMI: What VHD’s/Physical Disks Are Associated With a Virtual Machine?
I got a great question based on yesterday’s post (by the way my e-mail was blocking a lot of external messages that’s fixed now so I apologize to anyone I missed a mail from). The person was asking how they could figure out what physical disk a virtual machine is using when configured for passthough on the host… Well here’s the magic – I took it a little further and got the path’s for any attached VHD’s… Enjoy!
$HyperVParent = "localhost" $HyperVGuest = "My Virtual Machine" $VMManagementService = Get-WmiObject -class "Msvm_VirtualSystemManagementService" -namespace "root\virtualization" -ComputerName $HyperVParent $Vm = Get-WmiObject -Namespace "root\virtualization" -ComputerName $HyperVParent -Query "Select * From Msvm_ComputerSystem Where ElementName='$HyperVGuest'" $VMSettingData = Get-WmiObject -Namespace "root\virtualization" -Query "Associators of {$Vm} Where ResultClass=Msvm_VirtualSystemSettingData AssocClass=Msvm_SettingsDefineState" -ComputerName $HyperVParent # #Getting the Path's for Attached VHD's $VirtualDiskResource = Get-WmiObject -Namespace "root\virtualization" ` -Query "Associators of {$VMSettingData} Where ResultClass=Msvm_ResourceAllocationSettingData AssocClass=Msvm_VirtualSystemSettingDataComponent" ` -ComputerName $HyperVParent | Where-Object { $_.ResourceSubType -match "Microsoft Virtual Hard Disk" } ForEach-Object -InputObject $VirtualDiskResource -Process { Write-Host "Virtual Hard Disk At: $_.Connection[0]" } # #Getting the Disk Attachments for Passthrough Disks $PhysicalDiskResource = Get-WmiObject -Namespace "root\virtualization" ` -Query "Associators of {$VMSettingData} Where ResultClass=Msvm_ResourceAllocationSettingData AssocClass=Msvm_VirtualSystemSettingDataComponent" ` -ComputerName $HyperVParent | Where-Object { $_.ResourceSubType -match "Microsoft Physical Disk Drive" } ForEach-Object -InputObject $PhysicalDiskResource -Process { Write-Host "Passthrough Disk At: " ([WMI]$_.HostResource[0]).ElementName Write-Host "Passthrough Disk Drive Number: " ([WMI]$_.HostResource[0]).DriveNumber } |
Taylor Brown
Hyper-V Integration Test Lead
https://blogs.msdn.com/taylorb