Remove-sthPreviousModuleVersions.ps1

<#
.externalhelp sthTools.psm1-Help.xml
#>


function Remove-sthPreviousModuleVersions
{
    [CmdletBinding(SupportsShouldProcess = $true)]
    Param(
        # Module names, for which to uninstall previous versions.
        [string[]]$ModuleName = "*"
    )

    $Modules = Get-InstalledModule -Name $ModuleName

    foreach ($m in $Modules)
    {
        $AllModuleVersions = @(Get-InstalledModule -Name $m.Name -AllVersions)

        if ($AllModuleVersions.Count -gt 1)
        {
            $AllModuleVersionsSorted = $AllModuleVersions | Sort-Object -Property Version -Descending
            $toUninstall = $AllModuleVersionsSorted | Select-Object -Skip 1

            $out = "`nModule: {0}`nLatest version: {1}" -f $($AllModuleVersionsSorted[0].Name), $($AllModuleVersionsSorted[0].Version)

            if ($PSCmdlet.ShouldProcess("$out $($toUninstall.Version | ForEach-Object { Write-Output -InputObject "`nRemoving Version: $PSItem"})", "", ""))
            {
                Write-Output -InputObject $out
                
                foreach ($u in $toUninstall)
                {
                    Write-Output "Removing version: $($u.Version)"
                    Uninstall-Module -InputObject $u
                }
            }
        }
    }
}