Summing columns after using Group-Item

Welcome Forums General PowerShell Q&A Summing columns after using Group-Item

Viewing 2 reply threads
  • Author
    Posts
    • #199073
      Participant
      Topics: 1
      Replies: 1
      Points: 13
      Rank: Member

      I have a custom object with several NoteProperty values…pretty standard.  I want to group these values on an identifier value, so I use “Group-Object”.  Here is a sample:

      [PSCustomObject]@{
          ID = 'NO0001'
          Path = '\\server\share\path\folder'
          DataCount = 4
          DataCompleteCount = 2
      }

      I get an array of these back from a routine, and there can be multiple Path/DataCount/DataCompleteCount sets for each individual ID.  I want to display a 3 column table like so:

      ID          DataCount      DataCompleteCount
      NO0001         12                8
      NO0002         14                9
      ...

      I tried doing this:

      PS C:\Users> $ResultArray | Group ID
      
      Count Name        Group
      ----- ----        -----
          3 NO0001      {@{ID=NO0001; Path=\\server\share\path\folder; DataCount=4; DataC...
          1 NO0002      {@{ID=NO0002; Path=\\server2\share2\path\folder; DataCount=2; Dat...
      ...

      But no matter what I tried in a select statement I couldn’t get at the embedded objects in the returned group field.  Suggestions?

    • #199085
      Participant
      Topics: 12
      Replies: 1489
      Points: 1,987
      Helping Hand
      Rank: Community Hero

      Grouped objects are under .Group collection:

      $obj = @()
      $obj += [PSCustomObject]@{
          ID = 'NO0001'
          Path = '\\server\share1\path\folder'
          DataCount = 4
          DataCompleteCount = 2
      }
      $obj += [PSCustomObject]@{
          ID = 'NO0001'
          Path = '\\server\share2\path\folder'
          DataCount = 6
          DataCompleteCount = 4
      }
      $obj += [PSCustomObject]@{
          ID = 'NO0002'
          Path = '\\server\share1\path\folder'
          DataCount = 9
          DataCompleteCount = 8
      }
      $obj += [PSCustomObject]@{
          ID = 'NO0002'
          Path = '\\server\share2\path\folder'
          DataCount = 4
          DataCompleteCount = 3
      }
      
      
      $grp = $obj | Group-Object -Property ID
      
      $grp | Select Count, Name, @{Name='TotalDataCount';Expression={($_.Group.DataCount | Measure-Object -Sum).Sum}}
      

      Output:

      Count Name   TotalDataCount
      ----- ----   --------------
          2 NO0001             10
          2 NO0002             13
      
    • #199094
      Participant
      Topics: 1
      Replies: 1
      Points: 13
      Rank: Member

      Thank you, Rob.  I had everything right except how I was formulating the calculated expressions.  In some statements you use @{Name=’text’;Value={Code}} and in others you use @{Name=’text’;Expression={Code}}.  I was using “Value” instead of “Expression”, which didn’t work at all.  Your example is very well written and easy to understand.

Viewing 2 reply threads
  • You must be logged in to reply to this topic.