Private/ScriptBlocks/ScriptBlock_DefaultDynamicParamProcess.ps1

<#
.DESCRIPTION
This script block should be called within the Process block of all scripts that use the New-DynamicParameter function.
It will apply the "DefaultValue" parameter to the dynamic parameter.
It will create variables that can be used within the script from the dynamic parameters.
.EXAMPLE
& $ScriptBlock_DefaultDynamicParamProcess -ScriptPsBoundParameters:($PsBoundParameters) -ScriptPSCmdlet:($PSCmdlet) -DynamicParams:($RuntimeParameterDictionary)
.EXAMPLE
Invoke-Command -ScriptBlock:($ScriptBlock_DefaultDynamicParamProcess) -ArgumentList:($PsBoundParameters,$PSCmdlet,$RuntimeParameterDictionary) -NoNewScope
#>

$ScriptBlock_DefaultDynamicParamProcess = {
    Param(
        [Parameter(Mandatory = $true, ValueFromPipelineByPropertyName = $true, Position = 0)]$ScriptPsBoundParameters
        , [Parameter(Mandatory = $true, ValueFromPipelineByPropertyName = $true, Position = 1)][ValidateNotNullOrEmpty()]$ScriptPSCmdlet
        , [Parameter(Mandatory = $true, ValueFromPipelineByPropertyName = $true, Position = 2)][ValidateNotNullOrEmpty()]$DynamicParams
    )
    # For DynamicParam with a default value set that value
    $DynamicParams.Values |
        Where-Object { $_.IsSet -and $_.Attributes.ParameterSetName -in ($ScriptPSCmdlet.ParameterSetName, '__AllParameterSets') } |
        ForEach-Object { $ScriptPsBoundParameters[$_.Name] = $_.Value }
    # Convert the DynamicParam inputs into new variables for the script to use
    $ScriptPsBoundParameters.GetEnumerator() |
        ForEach-Object {Set-Variable -Name:($_.Key) -Value:($_.Value) -Force}
}