$logpath = Get-ChildItem "C:\PerfLogs\Admin\ServerManager\*.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 } } } if ($counters) { $cpuusage = $counters | Where-Object { $_.Path -like "*Processor(_Total)\% Processor Time*"} $result = $cpuusage | Group-Object { $_.Timestamp.ToString("yyyy-MM-dd HH:") } | ForEach-Object { $values = $_.Group.CookedValue $avg = ($values | Measure-Object -Average).Average $max = ($values | Measure-Object -Maximum).Maximum $min = ($values | Measure-Object -Minimum).Minimum [PSCustomObject]@{ Hour = $_.Name Avg = [math]::Round($avg,2) Max = [math]::Round($max,2) Min = [math]::Round($min,2) } } $result | Sort-Object Hour| Format-Table Hour, Avg, Max, Min -AutoSize [PSCustomObject]@{ Avg_Avg = [math]::Round(($result | Measure-Object Avg -Average).Average,2) Max_Avg = [math]::Round(($result | Measure-Object Max -Average).Average,2) Min_Avg = [math]::Round(($result | Measure-Object Min -Average).Average,2) } } else { Write-Host "No performance data in logs." }