Public/New-UserProvisioningSyncSessionOperationExcel.ps1

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

.EXAMPLE
$Operations | New-UserProvisioningSyncSessionOperationExcel
#>

function New-UserProvisioningSyncSessionOperationExcel {
    [CmdletBinding(SupportsShouldProcess = $true)]

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

        [Parameter(Mandatory = $true)]
        [ValidatePattern("\.xlsx$")]
        [String] $Path
    )

    Begin {
        $ExcelOperations = @()
    }

    Process {
        $Operation.Parameters.GetEnumerator() | ForEach-Object {
            if ($_.Key -eq "Replace") {
                $_.Value.GetEnumerator() | ForEach-Object {
                    $ExcelOperations += @{
                        Identity          = $Operation.Identity
                        ADDN              = $Operation.ADDN
                        IAMCoreIdentityId = $Operation.IAMCoreIdentityId
                        Action            = $Operation.Action
                        Attribute         = $_.Key
                        OldValue          = $Operation.OldValues ? $Operation.OldValues[$_.Key] : $null
                        NewValue          = $_.Value
                    }
                }
            }
            elseif ($_.Key -eq "Clear") {
                $_.Value | ForEach-Object {
                    $ExcelOperations += @{
                        Identity          = $Operation.Identity
                        ADDN              = $Operation.ADDN
                        IAMCoreIdentityId = $Operation.IAMCoreIdentityId
                        Action            = $Operation.Action
                        Attribute         = $_
                        OldValue          = $Operation.OldValues ? $Operation.OldValues[$_] : $null
                        NewValue          = "<cleared>"
                    }
                }
            }
            elseif ($_.Key -eq "OtherAttributes") {
                $_.Value.GetEnumerator() | ForEach-Object {
                    $ExcelOperations += @{
                        Identity          = $Operation.Identity
                        ADDN              = $Operation.ADDN
                        IAMCoreIdentityId = $Operation.IAMCoreIdentityId
                        Action            = $Operation.Action
                        Attribute         = $_.Key
                        OldValue          = $Operation.OldValues ? $Operation.OldValues[$_.Key] : $null
                        NewValue          = $_.Value ?? "<null>"
                    }
                }
            }
            else {
                $ExcelOperations += @{
                    Identity          = $Operation.Identity
                    ADDN              = $Operation.ADDN
                    IAMCoreIdentityId = $Operation.IAMCoreIdentityId
                    Action            = $Operation.Action
                    Attribute         = $_.Key
                    OldValue          = $Operation.OldValues ? $Operation.OldValues[$_.Key] : $null
                    NewValue          = $_.Value ?? "<null>"
                }
            }
        }
    }

    End {
        $ExcelOperations | Select-Object Identity, ADDN, IAMCoreIdentityId, Action, Attribute, OldValue, NewValue | Export-Excel -Path $Path -AutoSize -TableName "UserProvisioningOperations" -WorksheetName "Operations" -ClearSheet
    }
}