我对Powershell Scripting有点新鲜。我写了一个小脚本,它报告来自几个集群的统计数据并将它们导出到.csv文件中。
Get-Cluster | Foreach-object {
$cluster=$_
Write-Host "Récupération des données en cours depuis $cluster"
#Récupération des toutes les stats
$stat = Get-Stat -Entity $cluster -Stat mem.usage.average,cpu.usage.average -Start $start | Select-Object -Property entity, metricid, timestamp, value, unit
#$stats = Get-Stat -Entity SDCVSLB01 -Stat mem.usage.average,cpu.usage.average -Start (Get-Date).Adddays(-1)| Select-Object -Property value, MetricID -first 10
#Séparation des stats récupération des pics de consomation et metricid
$CPUStats = $stat | Where-Object {$_.Metricid -eq "cpu.usage.average"} | Sort-Object -Property Value -Descending | Select-Object -Property entity, metricid, timestamp, value, unit -first 15
$MemStats = $stat | Where-Object {$_.Metricid -eq "mem.usage.average"} | Sort-Object -Property Value -Descending | Select-Object -Property entity, metricid, timestamp, value, unit -first 15
$stats_metric = $CPUStats, $MemStats
#fonction ecart-type qui ressort l'ET avec les nombres entrées
function get-EcartType ($i) {
$numbers = $i
$avg = $numbers | Measure-Object -Average | select Count, Average
$popdev = 0
foreach ($number in $numbers){
$popdev += [math]::pow(($number - $avg.Average), 2)
}
$sd = [math]::Round([math]::sqrt($popdev / ($avg.Count-1)),2)
$sd
}
foreach ($element in $stats_metric) {
Write-Host
#création de l'objet pour exporter l 'ET
$element | Group-Object -Property entity | %{
[pscustomobject]@{
Cluster=$_.Group[0].entity
Moyenne_Max_CPU = [math]::Round(($_.Group | Where-Object {$_.Metricid -eq "cpu.usage.average"} | Measure-Object -Property Value -Average ).Average, 2)
Moyenne_Max_Mem = [math]::Round(($_.Group | Where-Object {$_.Metricid -eq "mem.usage.average"} | Measure-Object -Property Value -Average ).Average, 2)
Metric = $_.Group[0].MetricID
EcartType_CPU= get-EcartType $stats_metric[0].value
EcartType_Mem= get-EcartType $stats_metric[1].value
}
}| Export-Csv -Path $FSortie -Append -UseCulture -noType
(EcartType表示标准派生)
正如您所看到的,每个群集我有2行,我想只得到一行。
最好的修复方法是删除空块(带有0的块)并将剩余块合并为一行。
我认为我的错误来自foreach循环,但我不知道如何解决它,而且我缺乏发展技能。