private/Join-gScriptBlock.ps1

function Join-gScriptBlock {
    <#
    .SYNOPSIS
        Short description
    .DESCRIPTION
        Long description
    .EXAMPLE
        PS C:\> <example usage>
        Explanation of what the example does
    .INPUTS
        Inputs (if any)
    .OUTPUTS
        Output (if any)
    .NOTES
        $argumentList = @(1, 2, 3)
        $jointSB.Invoke($argumentList)
        & $jointSB @al
    #>

    [CmdletBinding()]
    [OutputType([scriptblock])]
    param (
        [Parameter(Mandatory = $true, Position = 0)]
        [scriptblock]
        $ParentScriptBlock,

        [Parameter(Mandatory = $true, Position = 1)]
        [scriptblock]
        $ChildScriptBlock
    )

    $jointScriptBlock = @"
param(`$Promise)
 
`$shouldSkip = `$false
`$argumentList = @(Invoke-Command -ScriptBlock {[psb]} -ArgumentList @(`$Promise, [ref]`$shouldSkip))
 
if (`$shouldSkip) {
    return `$argumentList
}
 
`$result = @(Invoke-Command -ScriptBlock {[csb]} -ArgumentList `$argumentList)
 
return `$result
"@


    $jointScriptBlock = $jointScriptBlock.Replace('[psb]', $ParentScriptBlock.ToString()).Replace('[csb]', $ChildScriptBlock.ToString())
    return [scriptblock]::Create($jointScriptBlock)
}