Hyper-V WMI: Criando uma imagem Thumbnail das VM’s
O Hyper-V tem uma API WMI que permite que você crie imagens thumbnails de máquinas virtuais que estão rodando ou pausadas.
Para fazer isso você precisa invocar o GetVirtualSystemThumbnailImage passando uma instância Msvm_VirutalSystemSettingData como referência, além do tamanho da imagem que você deseja
[System.Reflection.Assembly]::LoadWithPartialName("System.Drawing")
$HyperVParent = "localhost"
$HyperVGuest = "Hyperv-Host"
$ImagePath = "c:Temp"
$xRes = 640
$yRes = 480 $VMManagementService = Get-WmiObject -class "Msvm_VirtualSystemManagementService" -namespace "rootvirtualization" -ComputerName $HyperVParent
$Vm = Get-WmiObject -Namespace "rootvirtualization" -ComputerName $HyperVParent -Query "Select * From Msvm_ComputerSystem Where ElementName=’$HyperVGuest’"
$VMSettingData = Get-WmiObject -Namespace "rootvirtualization" -Query "Associators of {$Vm} Where ResultClass=Msvm_VirtualSystemSettingData AssocClass=Msvm_SettingsDefineState" -ComputerName $HyperVParent
$RawImageData = $VMManagementService.GetVirtualSystemThumbnailImage($VMSettingData, "$xRes", "$yRes") #| ProcessWMIJob $VMManagementService.PSBase.ClassPath "GetVirtualSystemThumbnailImage"
$VMThumbnail = new-object System.Drawing.Bitmap($xRes, $yRes, [System.Drawing.Imaging.PixelFormat]::Format16bppRgb565) $rectangle = new-object System.Drawing.Rectangle(0,0,$xRes,$yRes)
[System.Drawing.Imaging.BitmapData] $VMThumbnailBitmapData = $VMThumbnail.LockBits($rectangle, [System.Drawing.Imaging.ImageLockMode]::WriteOnly, [System.Drawing.Imaging.PixelFormat]::Format16bppRgb565)
[System.Runtime.InteropServices.marshal]::Copy($RawImageData.ImageData, 0, $VMThumbnailBitmapData.Scan0, $xRes*$yRes*2)
$VMThumbnail.UnlockBits($VMThumbnailBitmapData); $VMThumbnail
$VMThumbnail.Save("$ImagePath$HyperVGuest.jpg")
$HyperVGuest = "Hyperv-Host"
$ImagePath = "c:Temp"
$xRes = 640
$yRes = 480 $VMManagementService = Get-WmiObject -class "Msvm_VirtualSystemManagementService" -namespace "rootvirtualization" -ComputerName $HyperVParent
$Vm = Get-WmiObject -Namespace "rootvirtualization" -ComputerName $HyperVParent -Query "Select * From Msvm_ComputerSystem Where ElementName=’$HyperVGuest’"
$VMSettingData = Get-WmiObject -Namespace "rootvirtualization" -Query "Associators of {$Vm} Where ResultClass=Msvm_VirtualSystemSettingData AssocClass=Msvm_SettingsDefineState" -ComputerName $HyperVParent
$RawImageData = $VMManagementService.GetVirtualSystemThumbnailImage($VMSettingData, "$xRes", "$yRes") #| ProcessWMIJob $VMManagementService.PSBase.ClassPath "GetVirtualSystemThumbnailImage"
$VMThumbnail = new-object System.Drawing.Bitmap($xRes, $yRes, [System.Drawing.Imaging.PixelFormat]::Format16bppRgb565) $rectangle = new-object System.Drawing.Rectangle(0,0,$xRes,$yRes)
[System.Drawing.Imaging.BitmapData] $VMThumbnailBitmapData = $VMThumbnail.LockBits($rectangle, [System.Drawing.Imaging.ImageLockMode]::WriteOnly, [System.Drawing.Imaging.PixelFormat]::Format16bppRgb565)
[System.Runtime.InteropServices.marshal]::Copy($RawImageData.ImageData, 0, $VMThumbnailBitmapData.Scan0, $xRes*$yRes*2)
$VMThumbnail.UnlockBits($VMThumbnailBitmapData); $VMThumbnail
$VMThumbnail.Save("$ImagePath$HyperVGuest.jpg")
Thanks to Taylor Brow.
É isso.
Alessandro Cardoso
Categorias:Microsoft
Comentários (0)
Trackbacks (0)
Deixe um comentário
Trackback