Public/System/Write-PSCmdLetBegin.ps1

function Write-PSCmdLetBegin {
    [CmdletBinding()]
    [CmdLetTag()]
    param (
        [parameter(Mandatory, ValueFromPipeline)]
        $CmdLet
    )
    
    begin {
        
    }
    
    process {
        Invoke-Script{
            $cmdletName="$($Cmdlet.CommandRuntime)"
            Write-HostFormatted -object $cmdletName -Stream Verbose -ForegroundColor Blue -style underline
            $defaultParameters="Verbose","Debug","ErrorAction","WarningAction","InformationAction","ErrorVariable","WarningVariable","InformationVariable","OutVariable","OutBuffer","PipelineVariable"
            if ($Cmdlet.MyInvocation.MyCommand.Parameters){
                $commandParameters=$Cmdlet.MyInvocation.MyCommand.Parameters.Keys|Where-Object{$_ -notin $defaultParameters}
                $unboundParameters=@($commandParameters|Where-Object{$_ -notin $CmdLet.MyInvocation.BoundParameters.Keys}|Get-Variable|ForEach-Object{
                    [PSCustomObject]@{
                        Name = $_.Name
                        Value=$_.Value
                    }
                })
                $boundParameters=(@($CmdLet.MyInvocation.BoundParameters.Keys|ForEach-Object{
                    [PSCustomObject]@{
                        Name = $_
                        Value=$CmdLet.MyInvocation.BoundParameters[$_]
                    }
                }))
                $parameters=($boundParameters+$unboundParameters)
                $parameters|ForEach-Object{
                    New-Variable $_.Name $_.Value
                    Get-Variable $_.Name|Out-Variable -ForegroundColor Blue
                }
            }
        }
    }
    
    end {
        
    }
}