This 'advanced' function will summarize performance logs generated by Windows Performance Logs and Alerts, or more recently, Data Collector Sets.  It uses the Powershell Import-Counter cmdlet.  Using the raw data retrieved, Measure-PerfLog will summarize the data by performance counter.

This function has been implemented as an advanced function, and accepts pipeline input.  The output is in the form of an object that can easily be exported using Export-Csv.



function Measure-PerfLog { 
  Retrieves a summary of Performance logs 
  This function will analyse Performance Logs in the .blg, .csv or .txt format,  
  and produce a summary of the data by performance counter. 
  Measure-PerfLog Baseline.blg 
  Get-ChildItem *.csv | Measure-PerfLog 
  Measure-PerfLog "test.blg" | Export-Csv -Path counters.csv 
  Measure-PerfLog "test.blg" | ? {$_.maxval -gt 100} 
   "test.blg" | Measure-PerfLog | ft -AutoSize 
  .PARAMETER Filenames[] 
  One or more file names, as returned by Get-ChildItem, or in a string array. 
  # Written by BigTeddy September 2, 2011 
  # Version 1.1 
      HelpMessage='Please enter at least one .blg, .csv, or .txt file')] 
     $outinfo = @() 
   } # end begin 
   process { 
            Write-Host "Analysing $filename..." -ForegroundColor green 
            $logfile = Import-Counter $filename 
            $samples = New-Object System.Collections.ArrayList   
            foreach ($log in $logfile) {[void]$samples.Add($log.countersamples)} 
            for ($i = 0 ; $i -lt $samples[0].count; $i++) { 
                $value = 0 
                $maxvalue = 0 
                $minvalue = $samples[0][$i].cookedvalue 
                for ($j = 0 ; $j -lt $samples.count; $j++){ 
                    $v = $samples[$j][$i].cookedvalue 
                    $value +$v 
                    if ($v -gt $maxvalue) { $maxvalue = $v } 
                    if ($v -lt $minvalue) { $minvalue = $v } 
                    } #end $j for loop 
                $outdetail = New-Object System.Object 
                $outdetail | Add-Member -type NoteProperty -name Counter -value $samples[0][$i].path 
                $outdetail | Add-Member -type NoteProperty -name MaxVal -value $maxvalue 
                $outdetail | Add-Member -type NoteProperty -name MinVal -value $minvalue 
                $outdetail | Add-Member -type NoteProperty -name Average -value ($value / $samples.count) 
                $outinfo +$outdetail 
                } #end $i for loop 
  } # end process 
    return $outinfo 
  } # end end 
} #end function Measure-PerfLog