#ログファイルのパスとインターバルは適宜変更してください。 $logpath = "C:\perflogs\Admin\Hyper-VHostLog\*.blg" $intervalhr = 24 $since = (Get-Date).AddHours(-1*$intervalhr) $logs = Get-ChildItem $logpath | Where-Object { $_.LastWriteTime -ge $since } | Sort-Object LastWriteTime -Descending $counters = @() foreach ($log in $logs) { $ret = $null if((get-item($log)).Length -gt 131072) { $ret = Import-Counter -Path $log.FullName -ErrorAction SilentlyContinue | Where-Object { $_.TimeStamp -ge $since } | Select-Object -Expand CounterSamples if ($ret -and $ret.Count -gt 0) { $counters += $ret } } } $perfcounters = @( "Hyper-V Hypervisor Logical Processor(*)\% Total Run Time", "Hyper-V Hypervisor Virtual Processor(*)\% Total Run Time", "Hyper-V Hypervisor Root Virtual Processor(*)\% Total Run Time" "Processor(*)\% DPC Time", "Processor(*)\% Interrupt Time", "Memory\Available MBytes", "Hyper-V Dynamic Memory Balancer(*)\Available Memory", "Network Interface(*)\Bytes Total/sec", "Network Interface(*)\Output Queue Length", "Hyper-V Virtual Network Adapter(*)\Bytes/sec", "PhysicalDisk(*)\Avg. Disk sec/Read", "PhysicalDisk(*\Avg. Disk sec/Write", "PhysicalDisk(*)\Avg. Disk Read Queue Length", "PhysicalDisk(*)\Avg. Disk Write Queue Length" ) foreach ($perfcounter in $perfcounters) { $usage = $counters | Where-Object Path -like "*$perfcounter*" $result = $usage | Group-Object InstanceName | ForEach-Object { $values = $_.Group.CookedValue [PSCustomObject]@{ # Instance = $_.Name # Remove GUID for Hyper-V Virtual Network Adapter Instance = ($_.Name -replace "_[0-9a-f\-]{36}.*$", "" ) -replace "_\d+__device_\{[0-9a-f\-]+\}.*$", "" Avg = [Math]::Round(($values | Measure-Object -Average).Average,2) Max = [Math]::Round(($values | Measure-Object -Maximum).Maximum,2) Min = [Math]::Round(($values | Measure-Object -Minimum).Minimum,2) } } $perfcounter $result | Format-Table -AutoSize }