#●Hyper-Vホストパフォーマンスログの集計(CSV出力版) #ログファイルのパスとインターバルは適宜変更してください。 $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", "\LogicalDisk(*)\Avg. Disk sec/Read", "\LogicalDisk(*)\Avg. Disk sec/Write", "\LogicalDisk(*)\Avg. Disk Read Queue length", "\LogicalDisk(*)\Avg. Disk Write Queue Length" ) foreach ($perfcounter in $perfcounters) { $usage = $counters | Where-Object {$_.Path -like "*$perfcounter*" } | ForEach-Object { if ($_.TimeStamp -ge $since ) { [PSCustomObject]@{ Time = $_.TimeStamp Instance = $_.InstanceName Value = $_.CookedValue } } } $result = $usage | Group-Object { $_.Time.ToString("yyyy-MM-dd HH:00-59") },Instance | ForEach-Object { $values = $_.Group.Value [PSCustomObject]@{ Hour = $_.Name 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 | Sort-Object Hour | Format-Table -AutoSize if ($result.Count -gt 0 ) { $outDir = Split-Path $logpath $filename = $perfcounter ` -replace '\(\*\)', '(_)' ` -replace '[\\/]', '_' ` -replace '\s+', '_' $filename = $filename.Trim('_') $outFile = Join-Path $outDir "$filename.csv" $result | Export-Csv -Path $outFile -NoTypeInformation -Append:$(Test-Path $outFile) Write-Host "Export-CSV to $($outFile)" } }