uninstall.ps1

[CmdletBinding()]
param (
    [string]$ModulePath
)
$moduleManifest = Test-ModuleManifest -Path $((Get-ChildItem -Path $PSScriptRoot -Filter *.psd1).FullName)
$module = Get-Module $($moduleManifest.Name) -ListAvailable #| Where-Object { $_.Version -eq $moduleManifest.Version })

if ($module) {
    foreach ($Moduleinfo in $module) {
        $ModulePath = $Moduleinfo.ModuleBase
        try {
            $items = Get-ChildItem $ModulePath -Recurse

            # Delete all module files
            foreach ($file in (($items | Where-Object {!$_.PSIsContainer}).FullName)) {
                # $file
                [System.IO.File]::Delete($file)
            }

            # Delete all module subfolders
            $folders = @(($items | Where-Object {$_.PSIsContainer}).FullName)
            [array]::Reverse($folders)
            foreach ($folder in $folders) {
                [System.IO.Directory]::Delete($folder)
            }

            # Delete module folder and parent folder
            [System.IO.Directory]::Delete($ModulePath)
            [System.IO.Directory]::Delete($(Split-Path $ModulePath))

            # Remove-Item -Path $ModulePath -Recurse -Force -Confirm:$false -ErrorAction Stop
            Write-Output "Done uninstalling $($Moduleinfo.Name) version $($Moduleinfo.Version) from $($Moduleinfo.ModuleBase)"
        }
        catch {
            Write-Output ""
            Write-Output "Failed"
            Write-Output $_.Exception.Message
            Write-Output ""
            return $null
        }
    }
}
else {
    "[$($moduleManifest.Name)] module not found. Nothing to uninstall." | Out-Default
}