Syneticon-dj, bu öğleden sonra senin için bir şey yazdım. Bu sorunun ilginç olduğunu düşündüm, bu yüzden bu basit komut dosyası size Hyper-V ana bilgisayarında çalışan her VM'de okuma ve yazma G / Ç istatistikleri verecektir. Ek bir bonus olarak, her VM'yi vmwp.exe'nin İşlem Kimliğiyle ilişkilendirir.
GUI'ye ihtiyaç duymadığı için bunu Hyper-V sunucunuzda çalıştırabilirsiniz.
Dezavantajı, bu konuda çalışırken, performans sayaçlarının bir süre harika çalıştığını fark ettim ve sonra fark edilebilir bir nedenden dolayı sıfırda kalmaya karar verdiler. Belki de bu bir hata değil, Chris S'nin dediği gibi ... ama bu sayaçlar ne yazık ki çok yararlı olmayabilir. Ne olursa olsun, Virt kullanmak için komut dosyasını değiştirmek çok kolay olurdu. Bunun yerine Depolama Aygıtı sayaçları.
Çıktı şöyle görünür:
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); }
}
}
}