Public/Show-UserWritebackOperation.ps1

<#
.SYNOPSIS
Prints all planned operations to screen, including a summary over each attribute and method

.EXAMPLE
$Operations | Show-UserWritebackOperation
#>

function Show-UserWritebackOperation {
    [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] @{
            "Set-ADUser"          = 0
            "Remove-ADUser"       = 0
            "New-ADUser"          = 0
            "Rename-ADObject"     = 0
            "Move-ADObject"       = 0
            "Patch Entra ID User" = 0
        }
    }

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

        if ($Operation.Action -eq "Set-ADUser") {
            Write-Host "$($PSStyle.Foreground.Yellow)$($Operation.Action)$($PSStyle.Reset) $($Operation.Identity)"
            
            $Operation.Parameters.GetEnumerator() | ForEach-Object {
                if ($_.Key -eq "Replace") {
                    Write-Host " - $($_.Key):"
                    $_.Value.GetEnumerator() | ForEach-Object {
                        " - {0,-30} : {1}" -f $_.Key, ($_.Value ?? "<null>") | Write-Host
                    }
                }
                else {
                    " - {0,-30} : {1}" -f $_.Key, ($_.Value ?? "<null>") | Write-Host
                }
            }
        }
        elseif ($Operation.Action -eq "New-ADUser") {
            Write-Host "$($PSStyle.Foreground.Green)$($Operation.Action)$($PSStyle.Reset) $($Operation.Identity)"

            $Operation.Parameters.GetEnumerator() | ForEach-Object {
                if ($_.Key -in "OtherAttributes") {
                    Write-Host " - $($_.Key):"
                    $_.Value.GetEnumerator() | ForEach-Object {
                        " - {0,-30} : {1}" -f $_.Key, ($_.Value ?? "<null>") | Write-Host
                    }
                }
                else {
                    " - {0,-30} : {1}" -f $_.Key, ($_.Value ?? "<null>") | Write-Host
                }
            }
        }
        elseif ($Operation.Action -eq "Remove-ADUser") {
            Write-Host "$($PSStyle.Foreground.Red)$($Operation.Action)$($PSStyle.Reset) $($Operation.Identity)"
        }
        elseif ($Operation.Action -eq "Rename-ADObject") {
            Write-Host "$($PSStyle.Foreground.Yellow)$($Operation.Action)$($PSStyle.Reset) $($Operation.Identity)"
            $Operation.Parameters.GetEnumerator() | ForEach-Object {
                " - {0,-30} : {1}" -f $_.Key, $_.Value | Write-Host
            }
        }
        elseif ($Operation.Action -eq "Move-ADObject") {
            Write-Host "$($PSStyle.Foreground.Yellow)$($Operation.Action)$($PSStyle.Reset) $($Operation.Identity)"
            $Operation.Parameters.GetEnumerator() | ForEach-Object {
                " - {0,-30} : {1}" -f $_.Key, $_.Value | Write-Host
            }
        }
        elseif ($Operation.Action -eq "Patch Entra ID User") {
            Write-Host "$($PSStyle.Foreground.Cyan)$($Operation.Action)$($PSStyle.Reset) $($Operation.Identity)"

            $Operation.Parameters.GetEnumerator() | ForEach-Object {
                " - {0,-30} : {1}" -f $_.Key, $_.Value | Write-Host
            }
        } 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-ADUser" ? $PSStyle.Foreground.BrightRed : $Color
                $Color = $_.Key -eq "New-ADUser" ? $PSStyle.Foreground.BrightGreen : $Color
                $Color = $_.Key -eq "Set-ADUser" ? $PSStyle.Foreground.Yellow : $Color
                $Color = $_.Key -eq "Rename-ADObject" ? $PSStyle.Foreground.Magenta : $Color
                $Color = $_.Key -eq "Move-ADObject" ? $PSStyle.Foreground.Blue : $Color
                $Color = $_.Key -eq "Patch Entra ID User" ? $PSStyle.Foreground.Cyan : $Color

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