读取指定文件夹里性能计数器文件的信息,取出各个counter的平均值,存储在csv
param($folderPath="")
function funhelp()
{
$helpText=@"
NAME: PerformanceCounterCalculation)_multipleFile.ps1
This script will loop all the counters and calcualte the average value
PARAMETERS:
-$folderPath Specifies the folder of the .BLG you want to get
SYNTAX:
PerformanceCounterCalculation)_multipleFile.ps1 -folderPath "c:\disk\*"
"@
Write-Host $helpText -ForegroundColor Green
exit
}
#define PerformanceCounter CLASS
$source = @"
public class PerformanceCounter
{
private string computerName;
private string counterPath;
private double value;
private string date;
public PerformanceCounter(string computerName,string counterPath, double value,string date)
{
this.computerName = computerName;
this.counterPath = counterPath;
this.value = value;
this.date=date;
}
public double Value
{
get { return this.value; }
}
public string CounterPath
{
get { return this.counterPath; }
}
public string ComputerName
{
get { return this.computerName; }
}
public string Date
{
get { return this.date; }
}
}
"@
#------------------------------------------------------This script will loop all the counters and calcualte the average value
function Cal([string]$filename)
{
$PathCount=0;
$CounterArray=import-counter $filename
$PathCount=$CounterArray[0].CounterSamples.Count
for($i=0;$i -lt $PathCount;$i++)
{
$total=0
foreach ($singleCounterArray in $CounterArray)
{
$total=$total+$singleCounterArray.CounterSamples[$i].CookedValue
}
$averageValue= $total/$CounterArray.count
$countPath=$CounterArray[0].CounterSamples[$i].Path;
$countPath=$countPath.Substring(2,$countPath.Length-2);#elminiate the first \\
$computerName=$countPath.Substring(0,$countPath.IndexOf("\"));#get the computername
$countPath=$countPath.Substring($countPath.IndexOf("\"),$countPath.Length-$countPath.IndexOf("\"));#remove the computername
$date=[string]$CounterArray[0].Timestamp.ToString("yyyyMMdd");
$counter=New-Object PerformanceCounter($computerName,$countPath,$averageValue,$date);
$c=$a.add($counter) # $.add operation will output the number of PerformanceCounter, add $c to elimiate the behavior
}
}
if ($folderPath -eq "")#$folderPath can't be empty
{
funhelp
exit
}
$a=New-Object System.Collections.ArrayList
Add-Type -TypeDefinition $source
$blgList=Get-Item $folderPath -include *.blg
$processedNumber=0
foreach($blg in $blgList)
{
$processedNumber=$processedNumber+1
Cal([string]$blg.FullName)
Write-Host $processedNumber "files of " $blgList.count "have been processed"
}
Write-Host "Process done, Please wait..." -ForegroundColor Green
$filename="result"+[system.datetime]::now.ToString("yyyyMMddhhmmss")+".csv"
$a |Export-Csv $filename
Write-Host "Please check" $filename "for detail" -ForegroundColor Green
function funhelp()
{
$helpText=@"
NAME: PerformanceCounterCalculation)_multipleFile.ps1
This script will loop all the counters and calcualte the average value
PARAMETERS:
-$folderPath Specifies the folder of the .BLG you want to get
SYNTAX:
PerformanceCounterCalculation)_multipleFile.ps1 -folderPath "c:\disk\*"
"@
Write-Host $helpText -ForegroundColor Green
exit
}
#define PerformanceCounter CLASS
$source = @"
public class PerformanceCounter
{
private string computerName;
private string counterPath;
private double value;
private string date;
public PerformanceCounter(string computerName,string counterPath, double value,string date)
{
this.computerName = computerName;
this.counterPath = counterPath;
this.value = value;
this.date=date;
}
public double Value
{
get { return this.value; }
}
public string CounterPath
{
get { return this.counterPath; }
}
public string ComputerName
{
get { return this.computerName; }
}
public string Date
{
get { return this.date; }
}
}
"@
#------------------------------------------------------This script will loop all the counters and calcualte the average value
function Cal([string]$filename)
{
$PathCount=0;
$CounterArray=import-counter $filename
$PathCount=$CounterArray[0].CounterSamples.Count
for($i=0;$i -lt $PathCount;$i++)
{
$total=0
foreach ($singleCounterArray in $CounterArray)
{
$total=$total+$singleCounterArray.CounterSamples[$i].CookedValue
}
$averageValue= $total/$CounterArray.count
$countPath=$CounterArray[0].CounterSamples[$i].Path;
$countPath=$countPath.Substring(2,$countPath.Length-2);#elminiate the first \\
$computerName=$countPath.Substring(0,$countPath.IndexOf("\"));#get the computername
$countPath=$countPath.Substring($countPath.IndexOf("\"),$countPath.Length-$countPath.IndexOf("\"));#remove the computername
$date=[string]$CounterArray[0].Timestamp.ToString("yyyyMMdd");
$counter=New-Object PerformanceCounter($computerName,$countPath,$averageValue,$date);
$c=$a.add($counter) # $.add operation will output the number of PerformanceCounter, add $c to elimiate the behavior
}
}
if ($folderPath -eq "")#$folderPath can't be empty
{
funhelp
exit
}
$a=New-Object System.Collections.ArrayList
Add-Type -TypeDefinition $source
$blgList=Get-Item $folderPath -include *.blg
$processedNumber=0
foreach($blg in $blgList)
{
$processedNumber=$processedNumber+1
Cal([string]$blg.FullName)
Write-Host $processedNumber "files of " $blgList.count "have been processed"
}
Write-Host "Process done, Please wait..." -ForegroundColor Green
$filename="result"+[system.datetime]::now.ToString("yyyyMMddhhmmss")+".csv"
$a |Export-Csv $filename
Write-Host "Please check" $filename "for detail" -ForegroundColor Green
下面是csv文件的效果图
1
2
3