CoreePower.Module.RemoveModules.ps1

<#
.SYNOPSIS
    Removes previous versions of specified modules.
 
.DESCRIPTION
    The Remove-ModulesPrevious function removes previous versions of modules from the specified scope.
 
.PARAMETER ModuleNames
    Specifies the names of the modules to remove. This parameter is mandatory.
 
.PARAMETER Scope
    Specifies the scope from which to remove the modules. The available options are: CurrentUser, LocalMachine.
    The default value is CurrentUser.
#>

function Remove-ModulesPrevious {
    [Diagnostics.CodeAnalysis.SuppressMessageAttribute("PSUseApprovedVerbs", "")]
    [alias("morp")]
    param(
        [string[]]$ModuleNames = @('*'),
        [ModuleScope]$Scope = [ModuleScope]::CurrentUser
    )

    $outdated = Get-ModulesLocal -ModuleNames $ModuleNames -Scope $Scope -ExcludeSystemModules $true -ModulRecordState Previous
 
    foreach ($item in $outdated)
    {
        $DirVers = "$($item.BasePath)\$($item.Name)\$($item.Version)"
        Remove-Item -Recurse -Force -Path $DirVers
        Write-Host "Removed module:" $DirVers
    }
}

<#
.SYNOPSIS
    Removes specified PowerShell modules from the current user's module directory.
 
.DESCRIPTION
    The `Remove-Modules` function removes specified PowerShell modules from the module directory of the current user. It allows for the removal of modules that are no longer needed or outdated.
 
.PARAMETER ModuleNames
    Specifies the names of the PowerShell modules to be removed. Multiple module names can be provided as an array.
 
.PARAMETER Scope
    Specifies the scope of the module removal operation. The available values are "LocalMachine" and "CurrentUser". The default value is "CurrentUser".
 
.NOTES
    - The function requires appropriate permissions to remove modules from the module directory.
    - Removing modules will permanently delete their associated files and directories.
    - The function does not remove modules installed in system folders.
    - It is recommended to use caution when removing modules, as it may affect the functionality of dependent scripts or applications.
 
.EXAMPLE
    PS C:\> Remove-Modules -ModuleNames "Module1", "Module2"
 
    This command removes the PowerShell modules named "Module1" and "Module2" from the current user's module directory.
 
.EXAMPLE
    PS C:\> Remove-Modules -ModuleNames "OutdatedModule" -Scope CurrentUser
 
    This command removes the PowerShell module named "OutdatedModule" from the module directory of the current user.
 
.EXAMPLE
    PS C:\> Remove-Modules -ModuleNames "Module3" -Scope LocalMachine
 
    This command removes the PowerShell module named "Module3" from the module directory of the local machine.
 
.NOTES
    This function internally uses the `Get-ModulesLocal` function to retrieve module information and the `Remove-Item` cmdlet to delete module files and directories.
#>

function Remove-Modules {
    [Diagnostics.CodeAnalysis.SuppressMessageAttribute("PSUseApprovedVerbs", "")]
    [alias("morm")]
    param(
        [string[]]$ModuleNames,
        [ModuleScope]$Scope = [ModuleScope]::CurrentUser
    )

  
    $outdated = Get-ModulesLocal -ModuleNames $ModuleNames -Scope $Scope -ExcludeSystemModules $true -ModulRecordState All
 
    foreach ($item in $outdated)
    {
        $DirVers = "$($item.BasePath)\$($item.Name)\$($item.Version)"
        Remove-Item -Recurse -Force -Path $DirVers
        Write-Host "Removed module:" $DirVers
    }
}