Private/Tools/Checks/Test-AlzModule.ps1

function Test-AlzModule {
    [CmdletBinding()]
    param(
        [Parameter(Mandatory = $false)]
        [bool]$CheckVersion = $true,
        [Parameter(Mandatory = $false)]
        [switch]$AllowContinueOnFailure
    )

    $results = @()
    $hasFailure = $false
    $currentScope = "CurrentUser"

    $importedModule = Get-Module -Name AMA.ALZ
    $isDevelopmentModule = ($null -ne $importedModule -and $importedModule.Version -eq "0.1.0")

    if ((-not $CheckVersion) -or $isDevelopmentModule) {
        Write-Verbose "Skipping AMA.ALZ module version check"

        if($isDevelopmentModule) {
            $results += @{
                message = "AMA.ALZ module version is 0.1.0. Skipping version check as this is a development module."
                result  = "Warning"
            }
        } elseif (-not $CheckVersion) {
            $results += @{
                message = "AMA.ALZ module version check was skipped as 'AmaAlzModuleVersion' was not included in Checks."
                result  = "Warning"
            }
        }
    } else {
        # Check if latest AMA.ALZ module is installed
        Write-Verbose "Checking AMA.ALZ module version"
        $alzModuleCurrentVersion = Get-InstalledPSResource -Name AMA.ALZ 2>$null | Select-Object -Property Name, Version | Sort-Object Version -Descending | Select-Object -First 1
        if($null -eq $alzModuleCurrentVersion) {
            Write-Verbose "AMA.ALZ module not found in CurrentUser scope, checking AllUsers scope"
            $alzModuleCurrentVersion = Get-InstalledPSResource -Name AMA.ALZ -Scope AllUsers 2>$null | Select-Object -Property Name, Version | Sort-Object Version -Descending | Select-Object -First 1
            if($null -ne $alzModuleCurrentVersion) {
                Write-Verbose "AMA.ALZ module found in AllUsers scope"
                $currentScope = "AllUsers"
            }
        }

        if($null -eq $alzModuleCurrentVersion) {
            if($AllowContinueOnFailure.IsPresent) {
                $results += @{
                    message = "AMA.ALZ module is not correctly installed. Please install the latest version using 'Install-PSResource -Name AMA.ALZ'. Continuing as -destroy flag is set."
                    result  = "Warning"
                }
            } else {
                $results += @{
                    message = "AMA.ALZ module is not correctly installed. Please install the latest version using 'Install-PSResource -Name AMA.ALZ'."
                    result  = "Failure"
                }
                $hasFailure = $true
            }
        }

        $alzModuleLatestVersion = Find-PSResource -Name AMA.ALZ
        if ($null -ne $alzModuleCurrentVersion) {
            if ($alzModuleCurrentVersion.Version -lt $alzModuleLatestVersion.Version) {
                if($AllowContinueOnFailure.IsPresent) {
                    $results += @{
                        message = "AMA.ALZ module is not the latest version. Your version: $($alzModuleCurrentVersion.Version), Latest version: $($alzModuleLatestVersion.Version). Please update to the latest version using 'Update-PSResource -Name AMA.ALZ'. Continuing as -destroy flag is set."
                        result  = "Warning"
                    }
                } else {
                    $results += @{
                        message = "AMA.ALZ module is not the latest version. Your version: $($alzModuleCurrentVersion.Version), Latest version: $($alzModuleLatestVersion.Version). Please update to the latest version using 'Update-PSResource -Name AMA.ALZ'."
                        result  = "Failure"
                    }
                    $hasFailure = $true
                }
            } else {
                if($importedModule.Version -lt $alzModuleLatestVersion.Version) {
                    Write-Verbose "Imported AMA.ALZ module version ($($importedModule.Version)) is older than the latest installed version ($($alzModuleLatestVersion.Version)), re-importing module"

                    if($AllowContinueOnFailure.IsPresent) {
                        $results += @{
                            message = "AMA.ALZ module has the latest version installed, but not imported. Imported version: ($($importedModule.Version)). Please re-import the module using 'Remove-Module -Name AMA.ALZ; Import-Module -Name AMA.ALZ -Global' to use the latest version. Continuing as -destroy flag is set."
                            result  = "Warning"
                        }
                    } else {
                        $results += @{
                            message = "AMA.ALZ module has the latest version installed, but not imported. Imported version: ($($importedModule.Version)). Please re-import the module using 'Remove-Module -Name AMA.ALZ; Import-Module -Name AMA.ALZ -Global' to use the latest version."
                            result  = "Failure"
                        }
                        $hasFailure = $true
                    }
                } else {
                    $results += @{
                        message = "AMA.ALZ module is the latest version ($($alzModuleCurrentVersion.Version))."
                        result  = "Success"
                    }
                }
            }
        }
    }

    return @{
        Results      = $results
        HasFailure   = $hasFailure
        CurrentScope = $currentScope
    }
}