Syneticon-dj, aku menulis sesuatu untukmu sore ini. Saya pikir masalah ini menarik, jadi skrip sederhana ini akan memberi Anda statistik baca dan tulis IO pada setiap VM yang berjalan di host Hyper-V. Sebagai bonus tambahan, ia mengaitkan setiap VM ke ID Proses vmwp.exe-nya.
Anda dapat menjalankan ini di server Hyper-V Anda, karena tidak memerlukan GUI.
Kelemahannya adalah ketika saya sedang mengerjakan ini, saya perhatikan bahwa penghitung kinerja bekerja sangat baik untuk sementara waktu, dan kemudian tanpa alasan yang jelas mereka memutuskan untuk semua tetap pada nol. Yah, mungkin itu bukan bug, seperti kata Chris S ... tapi penghitung ini sayangnya mungkin tidak terlalu berguna. Apapun itu, akan sangat mudah untuk memodifikasi skrip untuk menggunakan Virt. Sebaliknya, Penghitung Perangkat Penyimpanan.
Outputnya terlihat seperti ini:
PID VMName ReadBytesPerSec WriteBytesPerSec
--- ------ --------------- ----------------
5108 DC02 483.90 0
2796 DC01 0 0
3348 ECA01 4782668.27 0
#Requires -Version 3
function Get-VMPidAndIO
{
<#
.SYNOPSIS
Gets the Process ID and I/O statistics of each virtual machine running on the Hyper-V host.
.DESCRIPTION
Gets the Process ID and I/O statistics of each virtual machine running on the Hyper-V host.
Currently only works for VMs using virtual IDE controllers.
Requires Powershell 3 at a minimum.
.LINK
http://myotherpcisacloud.com
.NOTES
Written by Ryan Ries, June 2013.
ryan@myotherpcisacloud.com
#>
BEGIN
{
Try
{
$VMProcesses = Get-CimInstance -Query "Select ProcessId,CommandLine From Win32_Process Where Name ='vmwp.exe'" -ErrorAction Stop
}
Catch
{
Write-Error $_.Exception.Message
Return
}
}
PROCESS
{
}
END
{
Foreach($_ In $VMProcesses)
{
$VMName = $((Get-VM | Where Id -EQ $_.CommandLine.Split(' ')[-1]).Name)
[PSCustomObject]@{PID=$_.ProcessId;
VMName=$VMName;
ReadBytesPerSec=[Math]::Round($(Get-Counter "\Hyper-V Virtual IDE Controller (Emulated)($VMName`:Ide Controller)\Read Bytes/sec").CounterSamples.CookedValue, 2);
WriteBytesPerSec=[Math]::Round($(Get-Counter "\Hyper-V Virtual IDE Controller (Emulated)($VMName`:Ide Controller)\Write Bytes/sec").CounterSamples.CookedValue, 2); }
}
}
}