Private/Wizard/Invoke-CgrWithActivitySink.ps1

function Invoke-CgrWithActivitySink {
    [CmdletBinding()]
    param(
        [Parameter(Mandatory)]
        [scriptblock] $Sink,

        [Parameter(Mandatory)]
        [scriptblock] $Action
    )

    $previous = Get-Variable -Name CgrActivitySink -Scope Script -ErrorAction SilentlyContinue
    try {
        Set-Variable -Name CgrActivitySink -Scope Script -Value $Sink
        & $Action
    }
    finally {
        if ($null -ne $previous) {
            Set-Variable -Name CgrActivitySink -Scope Script -Value $previous.Value
        }
        else {
            Remove-Variable -Name CgrActivitySink -Scope Script -ErrorAction SilentlyContinue
        }
    }
}