Public/Show-GroupWritebackConsolidationOperation.ps1

<#
.SYNOPSIS
Prints all planned operations to screen

.EXAMPLE
$Operations | Show-GroupWritebackConsolidationOperation
#>

function Show-GroupWritebackConsolidationOperation {
    [CmdletBinding(SupportsShouldProcess = $true)]

    Param(
        # The operation to show
        [Parameter(ValueFromPipeline = $true)]
        $Operation,

        [Parameter()]
        [Switch] $Single
    )

    Begin {
        if (!$Single.IsPresent) {
            Write-Host "[group]Operations report"
        }

        $Methods = [ordered] @{
            "Add member"    = 0
            "Remove member" = 0
        }

        $PreviousGroup = $null
    }

    Process {
        $Methods[$Operation.Action] += 1

        if($PreviousGroup -ne $Operation.Group -and -not $Single.IsPresent) {
            if ($PreviousGroup) {
                Write-Host ""
            }
            Write-Host "Group: $($Operation.Group)"
            $PreviousGroup = $Operation.Group
        }

        if ($Operation.Action -eq "Add member") {
            Write-Host " + $($PSStyle.Foreground.Green)$($Operation.Member)$($PSStyle.Reset)"
        }
        elseif ($Operation.Action -eq "Remove member") {
            Write-Host " - $($PSStyle.Foreground.Red)$($Operation.Member)$($PSStyle.Reset)"
        }
        else {
            Write-Warning "Unknown operation action '$($Operation.Action)'."
        }
    }

    End {
        if (!$Single.IsPresent) {
            Write-Host "[endgroup]"
        
            Write-Host "Operations summary:"
            $Methods.GetEnumerator() | ForEach-Object {
                $Color = $PSStyle.Foreground.Green
                $Color = $_.Key -eq "Remove member" ? $PSStyle.Foreground.BrightRed : $Color
                $Color = $_.Key -eq "Add member" ? $PSStyle.Foreground.BrightGreen : $Color

                Write-Host " - $($_.Value) x $($Color)$($_.Key)$($PSStyle.Reset)"
            }
        }
    }
}