Public/Import-RemoveModule.ps1

function Import-RemoteModule {
    [CmdletBinding()]
    param(
        [Parameter(Mandatory)]
        [ValidateNotNullOrEmpty()]
        [string]
        $ModuleName
        ,
        [Parameter(Mandatory)]
        [ValidateNotNullOrEmpty()]
        [string]
        $Prefix
        ,
        [Parameter(Mandatory,ParameterSetName='ComputerName')]
        [ValidateNotNullOrEmpty()]
        [string]
        $ComputerName
        ,
        [Parameter(ParameterSetName='ComputerName')]
        [ValidateNotNullOrEmpty()]
        [pscredential]
        $Credential
        ,
        [Parameter(ParameterSetName='Session')]
        [ValidateNotNullOrEmpty()]
        [System.Management.Automation.Runspaces.PSSession]
        $Session
    )

    Process {
        if ($PSCmdlet.ParameterSetName -ieq 'ComputerName') {
            Write-Verbose -Message ('[{0}] Creating session to {1}' -f $MyInvocation.MyCommand, $ComputerName)
            $SessionParameters = @{
                ComputerName = $ComputerName
            }
            if ($Credential) {
                Write-Verbose -Message ('[{0}] Using credentials' -f $MyInvocation.MyCommand)
                $SessionParameters.Add('Credential', $Credential)
            }
            $Session = New-PSSession @SessionParameters
        }

        Write-Verbose -Message ('[{0}] Loading module {1} in remote session' -f $MyInvocation.MyCommand, $ModuleName)
        Invoke-Command -Session $Session -ScriptBlock {
            Import-Module -Name $Using:ModuleName
        }

        Write-Verbose -Message ('[{0}] Importing module {1} from remote session with prefix {2}' -f $MyInvocation.MyCommand, $ModuleName, $Prefix)
        $RemoteModule = Import-PSSession -Session $Session -Module $ModuleName -Prefix $Prefix -AllowClobber -FormatTypeName *

        Write-Verbose -Message ('[{0}] Loading remote module {1} in local session' -f $MyInvocation.MyCommand, $ModuleName)
        Import-Module -Name $RemoteModule -Global

        Write-Verbose -Message ('[{0}] Done' -f $MyInvocation.MyCommand)
    }
}