Syneticon-dj, 오늘 오후에 당신을 위해 뭔가를 썼습니다. 이 문제가 흥미 롭다고 생각했기 때문에이 간단한 스크립트는 Hyper-V 호스트에서 실행중인 각 VM에 대한 읽기 및 쓰기 IO 통계를 제공합니다. 추가 보너스로 각 VM을 vmwp.exe의 프로세스 ID에 연결합니다.
Hyper-V 서버에서는 GUI가 필요 없으므로이를 실행할 수 있습니다.
단점은 내가이 작업을하는 동안 성능 카운터가 한동안 훌륭하게 작동한다는 것을 알았고 아무런 이유없이 그들은 모두 제로를 유지하기로 결정했습니다. Chris S가 말한 것처럼 버그가 아닐 수도 있지만 불행히도이 카운터는 전혀 유용하지 않을 수 있습니다. 그럼에도 불구하고 Virt를 사용하도록 스크립트를 수정하는 것은 매우 쉽습니다. 대신 저장 장치 카운터.
결과는 다음과 같습니다.
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); }
}
}
}