Syneticon-dj, ich habe heute Nachmittag etwas für dich geschrieben. Ich fand dieses Problem interessant, daher gibt Ihnen dieses einfache Skript die Lese- und Schreib-E / A-Statistiken für jede ausgeführte VM auf dem Hyper-V-Host. Als zusätzlichen Bonus ordnet er jede VM der Prozess-ID seiner vmwp.exe zu.
Sie können dies auf Ihrem Hyper-V-Server ausführen, da keine grafische Benutzeroberfläche erforderlich ist.
Der Nachteil ist, dass ich während der Arbeit bemerkte, dass die Leistungsindikatoren für eine Weile großartig funktionierten, und dann entschieden sie sich ohne erkennbaren Grund, alle auf Null zu bleiben. Naja, vielleicht ist es kein Fehler, wie Chris S sagt ... aber diese Zähler könnten leider doch nicht sehr nützlich sein. Unabhängig davon ist es sehr einfach, das Skript für die Verwendung von Virt zu ändern. Stattdessen Speichergerätezähler.
Die Ausgabe sieht folgendermaßen aus:
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); }
}
}
}