[edit - изменил пример данных на новую версию и изменил код для работы с новыми спецификациями.]
вот один из способов сделать эту работу.[ ухмылка ] он использует способ, которым PoSh позволяет получить все значения одного свойства из коллекции одним махом.$Collection.PropName
даст вам все значения, с которыми можно работать.
# fake reading in a CSV
# in real life, use Import-CSV
$InStuff = @'
timestamp, abc, A, B, C, D, E, F, G
6/4/2019, 6775, 3059, 4, 2292, 1328, 764, 0, 0
6/4/2019, 6910, 3167, 28, 3568, 1180, 1348, 0, 0
6/4/2019, 6749, 3161, 0, 2180, 2060, 1440, 0, 28
6/5/2019, 6738, 3118, 4, 2736, 1396, 984, 0, 0
6/5/2019, 6718, 3130, 12, 3076, 1008, 452, 0, 4
6/5/2019, 6894, 3046, 4, 2284, 1556, 624, 0, 0
'@ | ConvertFrom-Csv
$TargetPropertyList = $InStuff[0].PSObject.Properties.Name.Where({$_ -ne 'TimeStamp'})
$GroupedInStuff = $InStuff |
Group-Object -Property TimeStamp
$Results = foreach ($GIS_Item in $GroupedInStuff)
{
$HighestValues = [ordered]@{
TimeStamp = $GIS_Item.Name
}
foreach ($TPL_Item in $TargetPropertyList)
{
$TempHiVal = ($GIS_Item.Group.$TPL_Item.ForEach({[int]$_}) | Sort-Object)[-1]
$HighestValues.Add($TPL_Item, $TempHiVal)
}
[PSCustomObject]$HighestValues
}
$Results = $Results |
Sort-Object -Property {[datetime]$_.TimeStamp}
$Results |
Format-Table
output ...
TimeStamp abc A B C D E F G
--------- --- - - - - - - -
6/4/2019 6910 3167 28 3568 2060 1440 0 28
6/5/2019 6894 3130 12 3076 1556 984 0 4
пожалуйста, не забывайте НЕ использовать Format-Table
[или другие Format-*
командлеты] для чего-либо, кроме final display или вывод в текстовый файл .они нарезают ваши объекты, упаковывают их в код форматирования , а затем выплевывают их.он будет выдавать мусор, если вы попытаетесь использовать вывод для любой дополнительной работы.