我有一个自定义对象从一个SQL查询看起来像这样
这基本上是我如何构build对象,它工作正常,但我似乎无法find如何分组他们。
foreach ($row in $result) { $props = @{ 'MailboxName' = $row.MailboxName 'PSTsFound' = $row.PSTsFound 'Messagesremaining' = $row.Messagesremaining } $obj = New-Object -TypeName PSObject -Property $props $userPSTs += $obj }
Column1 Column2
User1 3
User1 6
User1 8
用户2 10
User2 3
User3 4
User4 6
User4 2
我想把它变成这个
Column1 Column2
User1 17
用户2 13
User3 4
User4 8
所以基本上总结列1匹配的列2。
预先感谢您的帮助
我假设你由Column1和Column2表示MailboxName和PSTsFound
如果您只是对具有相同MailboxName的所有行的PSTsFound总和感兴趣,而不是单个行,则可以使用HashTable和MailboxName作为键,并将整个对象作为值。 然后在你的迭代中,testing你的HashTable是否已经包含一个给定的键 – 如果是的话,把这个值添加到现有的条目中:
$SumTable = @{} foreach ($row in $result) { if($SumTable.ContainsKey($row.MailboxName)) { $obj = $SumTable[$row.MailboxName] $obj.PSTsFound += $row.PSTsFound $obj.Messagesremaining += $row.Messagesremaining $SumTable[$row.MailboxName] = $obj } else { $props = @{ 'MailboxName' = $row.MailboxName 'PSTsFound' = $row.PSTsFound 'Messagesremaining' = $row.Messagesremaining } $obj = New-Object -TypeName PSObject -Property $props $SumTable.Add($obj.MailboxName,$obj) } } $userPSTs = $SumTable.Values
如果您不想修改现有的集合,但只想输出总和,则可以在StackOverflow上build议的这种精彩的方法中使用Group-Object和Measure-Object cmdlet:
$userPSTs | Group-Object -Property MailboxName | Foreach-Object { New-Object PSObject -Property @{ MailboxName = $_.MailboxName PSTsFound = ($_.Group | Measure-Object -Property PSTsFound -Sum).Sum Messagesremaining = ($_.Group | Measure-Object -Property Messagesremaining -Sum).Sum } }